【问题标题】:In Django, how do I display the message (using Message Framework) without looping through?在 Django 中,如何在不循环的情况下显示消息(使用消息框架)?
【发布时间】:2011-05-20 18:24:36
【问题描述】:
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 条消息。我不希望它循环通过。 如何只显示最上面的消息?最重要的讯息。 或者,如何显示成功消息?

【问题讨论】:

    标签: javascript python django templates message


    【解决方案1】:

    据我所知,没有办法从模板本身中执行此操作(当然,没有自定义标记或过滤器)。不过,在模板之外很容易完成(未经测试):

    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)
    

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

    【讨论】:

    • {{ messages.pop }} 不显示消息。结果是空白?
    • @TIMEX:我说得太早了。事实证明,messages 并没有像我想象的那样建立在数组之上。我会更新我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2012-07-28
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多