Django登录模板传递‘Invalid credentials’消息失败问题求助
在Django中给登录模板传递错误消息的解决方案
我来帮你搞定这个问题!你现在遇到的是Django messages框架没在模板里正确显示的问题,咱们一步步来排查修复:
1. 先修复views.py里的小错误
你代码里的reverse(login)是个关键小问题——reverse()函数需要传入URL名称的字符串,不是变量名。修改后的代码如下:
from django.contrib import messages from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse # 你的其他逻辑... if access_token: # 处理成功逻辑 pass else: messages.error(request, "Wrong credentials") # 这里要给reverse传字符串形式的URL名称 return HttpResponseRedirect(reverse('login'))
2. 在login.html中正确渲染messages
你模板里的{% if m...没写完,这才是消息不显示的核心原因。要在模板里完整遍历messages并渲染,比如在登录表单上方添加这段代码:
{% if messages %} {% for message in messages %} <div class="alert alert-{{ message.tags }}"> {{ message }} </div> {% endfor %} {% endif %} # 下面是你的登录表单代码 <form method="post"> <!-- 表单内容 --> </form>
message.tags会自动对应你在views里用的error/warning等类型,方便你用CSS给不同类型的消息加样式(比如错误用红色背景)。
3. 额外检查项(确保messages框架正常工作)
- 确认你的
settings.py里已经启用了必要的中间件:
messages框架依赖Session中间件,所以这两个必须都在列表里。MIDDLEWARE = [ # 其他中间件... 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', ] - 确认
settings.py里的INSTALLED_APPS包含django.contrib.messages(默认是有的,但保险起见检查下)。
这样修改后,当用户输入无效凭据时,错误消息就会正确显示在登录页面啦!
内容的提问来源于stack exchange,提问作者user9160918
相关产品推荐
相关产品推荐

