删除/清除django,contrib.messages

hgncfbus  于 2023-05-01  发布在  Go
关注(0)|答案(4)|浏览(145)

我想有条件地清除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
sauutmhj

sauutmhj1#

一行程序看起来像这样:

list(messages.get_messages(request))

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

vom3gejh

vom3gejh2#

您需要遍历从'get_messages'方法检索的当前消息集的消息。在设置新消息之前,您可以在任何需要清除消息的地方使用此代码,也可以在需要清除所有消息的地方使用此代码。

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

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

e7arh2l6

e7arh2l63#

我在Django 3上。2、这里给出的答案没有一个对我有用。不知道为什么可能是因为新版本的一些变化。所以我想出了一个办法。如果您需要删除消息或者不想在某个模板上显示消息,只需迭代消息,而无需在模板文件中执行任何操作。

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

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

mf98qq94

mf98qq944#

这是Django 4中唯一对我有用的东西(除了覆盖模板中的messages块之外)。* :

from django.contrib.messages.storage import default_storage
request._messages = default_storage(request)

这基本上是重新初始化存储(就像消息中间件所做的那样)。

相关问题