显示Django消息框架消息
我一直在使用Django Messaging Framework来向模板中的用户显示消息。显示Django消息框架消息
我将其输出到模板是这样的:
<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 %}
有什么想法? 在此先感谢。
你可以把一个ifequal:
<ul>
{% for message in messages.errors %}
{% if 'error' in message.tags %}<li>{{ message }}</li>{% endif %}
{% endfor %}
</ul>
消息级别的消息,以标签的映射可以与MESSAGE_TAGS进行配置。
一个faff的一点,但你很可能通过增加自定义模板,背景处理器(参见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>
你可以做同样的变化,以建立一个字典映射错误级别消息,然后通过每个迭代字典。
雷托的回答对我的作品以这种方式
{% 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 %}
你真的需要再次执行循环吗?看起来像在第一个循环中执行'message.tags%'中的{%elif'错误')(或者在第一个循环之后完全独立的“if”)也可以工作,不是吗? – user558061 2013-06-22 11:17:28
我只用模板标签管理:
{% 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>
组。
在将来的版本(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 %}
显示所有讯息的好答案 – ppython 2017-10-18 13:49:20
你可以用下面的检查信息的标签。
{% if message.tags == "error" %} your code here {% endif %}
当然你也可以用{% 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 %}
您正在使简单的事情变得复杂 – 2016-12-24 03:55:36
感谢您的回答,但这意味着我必须多次遍历错误才能输出所有错误,然后输出所有成功消息。我想要一种方法来自己抓住所有的错误。 – Arif 2010-04-23 11:09:32
它应该是:{%if'message.tags%error' – 2013-01-10 13:51:07
谢谢。更新了我的答案。 – 2013-01-11 15:08:16