我有一個從許多視圖使用的Django模板。該模板有一個消息塊用於通知用戶任何應引起他們注意的事情。是否發送消息取決於視圖。某些視圖可能會向模板發送message
變量,而其他視圖可能不會。如何檢查是否定義了django模板變量?
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 %}
,{% ifnotequal message '' %}
,嘗試設置message
到None
或''
明確,但似乎並沒有幫助。
希望得到一些幫助!
Thanks @Colleen。這工作。你能解釋一下爲什麼另一種方式沒有?我只是覺得只有在消息存在的情況下才包含該塊是合乎邏輯的。 – zaphod
我認爲這是因爲你的基本模板中有{%block messages%},並且django模板呈現引擎會將其取出並在其擴展的任何位置查找並注入該塊,並忽略任何「if」或其他任何東西。話雖如此,我不能向你發誓,{%block%}'附近的'{%if%}'永遠無法工作 - 我從來沒有嘗試過,所以我也不知道。這可能是因爲它永遠不會起作用,這是主要問題,而不是你在你的基地中有'{%block messages%}'。 – Colleen
http://stackoverflow.com/questions/942797/why-cant-i-nest-a-block-tag-inside-an-if-tag使它聽起來好像它是前者。我認爲如果你的'{%if%}'在基礎上,那麼它就會起作用。或者如果該塊不在基地。 – Colleen