删除/清除django.contrib.messages

时间:2017-03-02 02:56:28

标签: django

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

3 个答案:

答案 0 :(得分:1)

您需要遍历消息,并将从“ get_messages”方法中检索到的当前消息集的“ used”标志设置为true。您可以在设置新消息之前要清除消息的任何地方或只想清除所有消息的地方使用此代码。

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

答案 1 :(得分:0)

单线的情况如下:

list(messages.get_messages(request))

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

答案 2 :(得分:0)

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

<div class='grid'>
  <img src="https://picsum.photos/200/300" class="picture"/>
  <p>Text</p>
  <p>Text</p>
  <p>Text</p>
  <p>Text</p>
</div>

我在应删除消息的模板中添加了这些行。我猜现在不可能在视图中执行此操作。仍在寻找社区对此的更多见解。