如何调试Django中的“无法存储所有临时消息”错误?

7 投票
2 回答
1457 浏览
提问于 2025-04-18 01:16

我有一个基于类的视图,当表单成功提交后会调用info()。在阅读了消息框架的文档并注释掉info调用后,我确定它是导致“并非所有临时消息都能被存储”的错误的原因。

不过,我搞不清楚在info调用之后发生了什么,导致了标题中的错误。

2 个回答

2

这个问题让我困扰了一段时间。如果你想在浏览器上显示你的消息,比如在开发、调试的时候,或者想要一个按顺序排列的消息记录,你可以更新 Django 的 settings.py 文件。

把 MESSAGE_STORAGE 变量改成:

MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'

这样的话,它会先使用 CookieStorage,然后再回退到基本存储。

另外一个选择是把消息存储在会话中

MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
2

结果发现,客户端的cookie里存储的消息数量已经达到了上限。当服务器尝试把更多的cookie放进客户端的cookie时,失败了,出现了“并不是所有临时消息都能被存储”的错误。

我通过确保消息可以在浏览器中显示来解决这个问题,具体做法是在网站的基础模板里添加了一个

{% block messages %}

的代码。

撰写回答