2016-03-24 6 views
3

Ich habe base.html Vorlage wie folgt aus:Django verschachtelt 'mit' und 'Block' Tag

<p>{% block a %}{% endblock %}</p> 
<p>{% block b %}{% endblock %}</p> 

Und index.html Vorlage:

{% extends "base.html" %} 

{% with description="foo" %} 
    {% block a %}{{ description }}{% endblock %} 
    {% block b %}{{ description }}{% endblock %} 
{% endwith %} 

Aber das Ergebnis wird :

<p></p> 
<p></p> 

Statt:

<p>foo</p> 
<p>foo</p> 

Gibt es eine Problemumgehung dafür?

Antwort

4

Nicht in der Art, wie Sie es möchten, in geerbten Vorlagen django sucht nach Code innerhalb von was bedeutet, dass es die Existenz Ihrer with Block außerhalb dieser nicht erkennen wird. so Ihre einzige Option die mit in jedem Block

{% block a %}  
    {% with description="foo" %} 
     {{ description }} 
    {% endwith %}  
{% endblock %} 

enthalten ist zwar für einen einzelnen nennen es nicht wert ist, die with verwenden, die einzige andere Möglichkeit ist description durch den Kontext

2

UPDATE passieren: Es funktioniert nicht so, wie ich es für meinen speziellen Fall erwartet habe. Zeige Kommentare.

Nach Sayse Antwort und besser zu verstehen, zu lesen, wie Blöcke arbeiten, habe ich mit dieser Lösung kommen:

base.html:

{% block wrapping_block %} 
    {% block a %} 
    {% endblock %} 

    {% block b %} 
    {% endblock %} 
{% endblock %} 

index.html:

{% extends "base.html" %} 

{% block wrapping_block %} 
    {% with description='foo' %} 
     {% block a %} 
      {{ description }} 
     {% endblock %} 

     {% block b %} 
      {{ description }} 
     {% endblock %} 
    {% endwith %} 
{% endblock %} 
+0

Sehr interessant Ansatz, ich bin überrascht, dass es funktioniert, ich rate es, weil Sie einen Block für Dinge, die erben von 'index.html' definieren. Ich frage mich immer noch, wofür "description" eigentlich verwendet wird, aber ich bin froh, dass du etwas gefunden hast, das funktioniert! – Sayse

+0

Das Problem mit diesem ist, dass alles in 'wrapping_block' und außerhalb von 'a' und 'b' in den Sub-Templates entfernt wird. Gerade jetzt realisiert ... hoppla! – dablak

+0

Ich versuche, die gleichen Werte für die Meta-Tags und die Open Graph-Tags wie Titel und Beschreibung zu verwenden. Auf einigen Seiten ist dies in der Vorlage definiert und einige Wörter lang. Ich wollte eine Variable verwenden, um sie konsistent zu halten. Ich schätze, dass ich es doch wiederholen muss. – dablak

Verwandte Themen