26

まず、使用しようとしているコードから始めましょう。

{% if modal == true %}
    {% block header %}{% endblock %}
    {% block footer %}{% endblock %}
{% endif %}

私が達成しようとしているのは、modal という変数が true の場合にのみ、ヘッダー ブロックとフッター ブロックを表示しないことです。if ステートメントの下にもこれがあります。

{% block content %}
    {{ dump(modal) }}
{% endblock %}

ここで何が起こるかというと、モーダルの値が true かそうでないかに関係なく、ヘッダー ブロックとフッター ブロックを空にするためのオーバーライドが常に実行されるということです。そのため、モーダルを false として渡してこれを実行すると、ヘッダーとフッターがまだ表示されません。dump コマンドの出力は true または false を正確に示しますが、条件は常に if ステートメントで true に評価されるようです。

ブロックを条件付きステートメントでラップすることはできませんか、またはこれを機能させるために何か追加する必要がありますか?

ご協力いただきありがとうございます。

4

2 に答える 2

57

定義

{% block footer %}Some standard content{% endblock %}

親小枝テンプレートで。次に、フッターのコンテンツを表示するかどうかを決定するテンプレートで、次のことができます。

{% block footer %}
  {% if not modal == true %}
    {{ parent() }}
  {% endif %}
{% endblock %}

モーダルが真の場合 - フッターは空になり、そうでない場合 - フッターに「標準コンテンツ」が表示されます

于 2013-02-07T00:50:07.537 に答える
27

ドキュメントで述べられているように、ブロックはその周りのロジックを気にしません:

ブロックは、テンプレートの特定の部分がどのようにレンダリングされるかを変更する方法を提供しますが、その周りのロジックにはまったく干渉しません。

その記事の最後の例でわかるように、そのロジックはブロックの外側ではなくブロックの内側に配置する必要があります。

于 2013-02-06T21:26:32.190 に答える