57

多くのビューで使用される django テンプレートがあります。テンプレートには、注意を払う必要があることをユーザーに通知するために使用されるメッセージのブロックがあります。メッセージが送信されるかどうかは、ビューによって異なります。messageテンプレートに変数を送信するビューもあれば、送信しないビューもあります。

view_1:
    message = "This is an important message"
    render_to_response("my_template.html", 
                       {'message':message, 'foo':foo, 'bar':bar},
                       context_instance = RequestContext(request))

view_2:
    message = "This is an important message"
    render_to_response("my_template.html", 
                       {'foo':foo, 'bar':bar},
                       context_instance = RequestContext(request))

テンプレートでmessage変数を確認し、以下のようにブロックを含めます。

base_template.html:
    ....
    {% block main_body %}
         {% block messages %}
         {% endblock %}
         {% block content %}
         {% endblock %}
    {% endblock %}
    ....

 my_template.html:
     {% extends base_template.html %}
     ....
     {% if message %}
          {% block messages %}
              <div class='imp_msg'>{{ message }} </div>
          {% endblock %}
     {% endif %}
     ...

問題は、view_2 がメッセージを渡さなくても、最終的な html が<div class='imp_msg'></div>-- 基本的に空の div でレンダリングされることです。

その CSS はメッセージに light_red 背景を与えるように設計されているため、ページの上部に空の light_red バーが表示されます。

私も試しました: {% ifnotequal message None %}、を toまたは明示的に{% ifnotequal message '' %}設定しようとしましたが、役に立たないようです。messageNone''

助けていただければ幸いです。

4

3 に答える 3

64

{% block %}あなたはあなたとあなたを切り替える必要があります{% if %}

{% block messages %}
    {% if message %}<div class='imp_message'>{{ message }}</div>{% endif %}
{% endblock %}
于 2012-10-16T23:18:04.177 に答える
39

None確認するには、if ステートメントで、次のように値を と比較する必要があります。

{% if some_missing_var is None %}
   // code here if some_missing_var exists
{% else %}
   // code here if some_missing_var does not exist
{% endif %}

その他の場合 (ドキュメントから):

通常、変数が存在しない場合、テンプレート システムはエンジンの string_if_invalid 構成オプションの値を挿入します。これは、デフォルトで '' (空の文字列) に設定されています。

他の回答をいくつか試しましたが、無効な変数の処理方法に関するドキュメントを読み、上記が明確になるまで機能しませんでした。

無効な変数の処理について説明しているドキュメントへのリンク

于 2016-03-24T23:57:25.673 に答える