为什么我使用Django的message功能时,messages.warning提示不生效?
Django messages提示不展示的问题排查与解决方案
问题1:视图层逻辑错误,警告消息根本没有被触发
request.POST.get() 方法无论对应参数是否存在、值是否为空,都会默认返回None或者空字符串,不会抛出任何异常,所以你写的except代码块永远不会被执行,messages.warning自然没有被调用。
修复后的视图代码:
from django.contrib import messages selection = request.POST.get('portrange', '').strip() if not selection: messages.warning(request, "Please select the ports")
问题2:Django messages框架配置不完整
仅导入依赖包无法使用messages功能,需要先在settings.py中完成全套配置:
- 确认
INSTALLED_APPS列表中存在django.contrib.messages - 确认
MIDDLEWARE列表中按顺序包含以下两个中间件:django.contrib.sessions.middleware.SessionMiddlewaredjango.contrib.messages.middleware.MessageMiddleware
- 确认
TEMPLATES配置项的OPTIONS.context_processors列表中存在django.contrib.messages.context_processors.messages
问题3:模板层缺少消息渲染代码
你目前提供的HTML代码只有表单部分,没有编写遍历输出messages的逻辑,就算消息已经正常存入,页面也不会展示。你可以将以下代码添加到模板的合适位置(建议放到公共base模板中,所有页面都可复用):
{% if messages %} {% for message in messages %} <div class="alert alert-{{ message.tags }}"> {{ message }} </div> {% endfor %} {% endif %}
问题4:重定向目标页面未加载渲染逻辑
messages默认存储在session中,仅会在下一次请求的页面展示一次,你需要确认提交后重定向到的页面,使用的模板包含了上述的messages渲染代码。
内容的提问来源于stack exchange,提问作者L.Calvin
相关产品推荐
相关产品推荐

