【问题标题】:Deleting/Clearing django.contrib.messages删除/清除 django.contrib.messages
【发布时间】:2017-03-02 02:56:28
【问题描述】:

我想有条件地清除django.contrib.messages。这两个问题中讨论的解决方案都不起作用:

Delete all django.contrib.messages
Django: Remove message before they are displayed

关于如何清除消息有什么建议吗?我正在使用 django 1.10

代码:

messages = get_messages(request)
for msg in messages:
    pass
for msg in messages._loaded:
    del msg
for msg in messages._queued_messages:
    del msg

【问题讨论】:

  • 偶然发现了同样的问题;也许我们需要创建一个自定义存储/后端?
  • 也许吧。由于这个问题,我最终没有使用 django.contrib.messages

标签: django


【解决方案1】:

单行应该是这样的:

list(messages.get_messages(request))

它基本上执行与@Avukonke Peter 的解决方案相同的任务。但是,我发现没有必要将消息设置为已使用(我相信这是默认设置的,但如果我错了,请随时纠正我)。我无法理解为什么没有messages.clear() 函数。

【讨论】:

    【解决方案2】:

    您需要遍历从“get_messages”方法检索到的当前消息集的消息。您可以在任何想要在设置新消息之前清除消息的地方使用此代码,或者在您想简单地清除所有消息的地方使用此代码。

    system_messages = messages.get_messages(request)
    for message in system_messages:
        # This iteration is necessary
        pass
    

    注意:如果您不想清除消息,请将 system_messages.used 标志设置为“False”,因为消息被标记为在存储实例迭代时清除(并在处理响应时清除)。 参考:https://docs.djangoproject.com/en/3.0/ref/contrib/messages

    【讨论】:

      【解决方案3】:

      我在 Django 3.2 上,这里给出的答案都不适合我。不知道为什么。也许这可能是由于较新版本中的一些更改。所以我想出了一种方法来做到这一点。如果您需要删除消息或不想在某个模板上显示消息,只需遍历消息而不在模板文件中执行任何操作。

      {% if messages %}
          {% for message in messages %}
          {% endfor %}
      {% endif %}
      

      我在应该删除消息的模板中添加了这些行。我想现在在视图中这样做是不可能的。仍在寻找社区对此的更多见解。

      【讨论】:

        猜你喜欢
        • 2017-01-23
        • 2013-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多