如何调试Django中的“无法存储所有临时消息”错误?
我有一个基于类的视图,当表单成功提交后会调用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 %}
的代码。