zap*_*hod 39 django django-templates
我有一个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))
Run Code Online (Sandbox Code Playgroud)
在模板中,我检查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 %}
...
Run Code Online (Sandbox Code Playgroud)
问题是即使view_2没有传递消息,最终的html也会呈现<div class='imp_msg'></div>- 基本上是一个空div.
由于CSS旨在为消息提供light_red背景,因此我看到的是页面顶部的空light_red栏.
我也试过:{% ifnotequal message None %},{% ifnotequal message '' %},尝试设置message到None或''明确,但似乎并没有帮助.
非常感谢一些帮助!
Col*_*een 44
你需要切换你{% block %}和你的{% if %}
{% block messages %}
{% if message %}<div class='imp_message'>{{ message }}</div>{% endif %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
slo*_*621 19
要检查,在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 %}
Run Code Online (Sandbox Code Playgroud)
在其他情况下(来自文档):
通常,如果变量不存在,模板系统会插入引擎的string_if_invalid配置选项的值,默认情况下设置为''(空字符串).
我尝试了其他一些答案,直到我阅读了文档并且上面的内容清楚明了之后它们才起作用.
如果您不想KeyError在模板上下文中没有变量时乱扔日志,我建议使用 templatetags 过滤器。
在myapp/templatetags/filters.py我添加:
@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
Run Code Online (Sandbox Code Playgroud)
在html模板中:
{% load filters %}
...
{% var_exists 'project' as project_exists %}
{% if project_exists %}
...
{% endif}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50665 次 |
| 最近记录: |