我有一个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 %}
,{% ifnotequal message '' %}
,尝试明确地将message
设置为None
或''
,但似乎没有帮助。
非常感谢一些帮助!
答案 0 :(得分:42)
您需要切换{% block %}
和{% if %}
{% block messages %}
{% if message %}<div class='imp_message'>{{ message }}</div>{% endif %}
{% endblock %}
答案 1 :(得分:16)
要检查,在if语句中,您需要将值与None
进行比较,如下所示:
{% 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配置选项的值,默认设置为''(空字符串)。
我尝试了其他一些答案,直到我阅读了文档并且上面的内容已经明确了之后它们才起作用。
答案 2 :(得分:1)
如果您不想在模板上下文中没有变量时用 comp
乱扔日志,我建议使用模板标签过滤器。
在 KeyError
中添加:
myapp/templatetags/filters.py
在 html 模板中:
@register.simple_tag(takes_context=True)
def var_exists(context, name):
dicts = context.dicts # array of dicts
if dicts:
for d in dicts:
if name in d:
return True
return False