显示Django消息框架消息

时间:2010-04-23 09:37:51

标签: django django-templates

我一直在使用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 %}

有什么想法吗? 提前谢谢。

6 个答案:

答案 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属性包含messageextra_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">&times;</button>
            </div>
        </div>
    {% endfor %}
{% endif %}