在Django中,如何在不循环的情况下显示消息(使用消息框架)?

1 投票
1 回答
1801 浏览
提问于 2025-04-16 08:06
messages.success(request, "Success. Your settings have been saved.")

好的,现在在我的模板里,我这样做:

 {% if messages %}
    {% for m in messages %}
        <div class="notification_message" data-message="{{ m }}">{{ m }}</div>
    {% endfor %}
    {% endif %}

但是这太傻了!!!我只有一条消息。我不想让它循环显示。
我怎么才能只显示最上面的那条消息?也就是最重要的那条消息。
或者,我怎么才能显示成功的消息呢?

1 个回答

0

据我所知,模板内部是无法直接做到这一点的(当然,除非使用自定义标签或过滤器)。不过,在模板外部实现这个功能还是比较简单的(虽然我没有测试过):

from django.contrib.messages import get_messages, constants as message_level

def last_message(messages, level = None):
    """Returns the last Message object in the messages with the
    specified level, or just the last message if no level is
    specified
    """

    if level is None:
        return None if not messages else messages[-1]

    level = int(level)    # Not strictly necessary, but Message object does this in its __init__()
    for message in reversed(messages):
        if message.level == level:
            return message
    return None

用法:

messages = get_messages(request)
the_last_message = last_message(messages)
the_last_success_message = last_message(messages, message_level.SUCCESS)

然后你可以通过上下文把这些值传递到你的模板中。

撰写回答