我一直在使用Django Messaging Framework向模板中的用户显示消息。
我将它们输出到模板中:
<ul>
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
这会输出所有消息,错误,警告,成功等。 我只是想知道是否有人有任何想法如何只显示错误信息:
<ul>
{% for message in messages.errors %}
<li>{{ message }}</li>
{% endfor %}
</ul>
到目前为止,我提出的最好的是:
{% if messages %}
{% for message in messages %}
{% if forloop.first %}
{% if message.tags == 'error' %}
<div class="error">
<ul>
{% endif %}
{% endif %}
<li>{{ message }}</li>
{% if forloop.last %}
</ul>
</div>
{% endif %}
{% endfor %}
{% endif %}
有什么想法吗? 提前谢谢。
答案 0 :(得分:9)
你可以放一个ifequal:
<ul>
{% for message in messages.errors %}
{% if 'error' in message.tags %}<li>{{ message }}</li>{% endif %}
{% endfor %}
</ul>
可以使用MESSAGE_TAGS配置消息级别到消息标记的映射。
答案 1 :(得分:5)
有点不对劲,但您可以通过添加自定义模板上下文处理器(参见https://docs.djangoproject.com/en/dev/ref/templates/api/)来实现这一点 - 类似
def collect_error_messages(request):
messages = get_messages(request)
error_messages = [ m for m in messages if 'error' in m.tags]
return {'error_messages': error_messages}
然后将它添加到settings.py中的TEMPLATE_CONTEXT_PROCESSORS列表中,然后在模板中添加:
<ul>
{% for message in error_messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
您可以对其进行修改,以便为消息构建dict映射错误级别,然后遍历每个dict。
答案 2 :(得分:4)
Reto的答案以这种方式对我有用
{% for message in messages %}
{% if 'success' in message.tags %}
<div class="alert alert-success">
<a class="close" href="#" data-dismiss="alert">×</a>
<strong>Success!</strong>
{{ message }}
</div>
{% endif %}
{% endfor %}
{% for message in messages %}
{% if 'error' in message.tags %}
<div class="alert alert-error">
<a class="close" href="#" data-dismiss="alert">×</a>
<strong>Error!</strong>
{{ message }}
</div>
{% endif %}
{% endfor %}
{% for message in messages %}
{% if 'info' in message.tags %}
<div class="alert alert-info">
<a class="close" href="#" data-dismiss="alert">×</a>
<strong>INFO!</strong>
{{ message }}
</div>
{% endif %}
{% endfor %}
答案 3 :(得分:1)
我只管理模板标签:
{% if messages %}
{% regroup messages by tags as messages %}
<div id="messages">
{% for tags in messages %}
<ul class="{{ tags.grouper }}">
{% for message in tags.list %}
<li>{{ message|capfirst }}</li>
{% endfor %}
</ul>
{% endfor %}
</div>
{% endif %}
密钥是{% regroup %}标记。
这仍然存在一些问题,因为tags
属性包含message的extra_tags
,因此如果您使用它,您将获得额外的<ul>
组。< / p>
在将来的版本(probably 1.7)中,会有一个level_tag
属性,以便很快就会出现问题。
(只要level_tag
属性可用)
{% if messages %}
{% regroup messages by level_tag as messages %}
<div id="messages">
{% for level in messages %}
<ul class="{{ level.grouper }}">
{% for message in level.list %}
<li>{{ message|capfirst }}</li>
{% endfor %}
</ul>
{% endfor %}
</div>
{% endif %}
答案 4 :(得分:1)
您可以使用以下内容来检查邮件标记。
{% if message.tags == "error" %}
your code here
{% endif %}
答案 5 :(得分:-1)
当然,您可以使用{% regroup %}代码执行此操作,但如果您想要正常工作,还必须使用dictsort filter。首先,标签应按名称排序,然后分组:
{% if messages %}
{% regroup messages|dictsort:"tags" by tags as message_list %}
{% for tags in message_list %}
<div class="alert alert-{{ tags.grouper }}">
<div class="container">
<ul>
{% for message in tags.list %}
<li>
{{ message }}
</li>
{% endfor %}
</ul>
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
</div>
</div>
{% endfor %}
{% endif %}