Django 2.0.1中'django.contrib.auth.views.login'反向解析失败求助
解决Django 2.0.1中的NoReverseMatch登录视图错误
这个问题的核心是Django 2.0对auth模块视图的结构做了重大调整,再加上模板中URL标签的写法错误,导致反向解析失败。下面一步步帮你解决:
问题根源拆解
- 旧写法不再适用:你模板里用的
django.contrib.auth.views.login是Django 1.x时代的函数式视图路径,Django 2.0已经将登录视图重构为类视图LoginView,并且不再支持直接用完整视图路径做反向解析。 - 模板标签语法错误:你尝试的第二种写法
{% url django.contrib.auth.views.login %}没有给视图路径加引号,模板会把它当作变量解析,但这个变量不存在,最终变成空字符串,所以报错Reverse for '' not found。
正确解决步骤
1. 先配置项目的urls.py
在项目根目录的urls.py中,正确引入auth的登录类视图,并给URL命名:
from django.contrib.auth import views as auth_views from django.urls import path urlpatterns = [ # 其他已有URL配置... path('login/', auth_views.LoginView.as_view(), name='login'), ]
这里我们给登录URL起了一个清晰的名字login,方便模板反向解析。
2. 修改login.html模板中的表单action
把原来的action改成用命名URL的写法,同时别忘了加上{% csrf_token %}(否则会触发CSRF验证错误):
<form method="post" action="{% url 'login' %}"> {% csrf_token %} <!-- 你的用户名、密码输入框等表单内容 --> </form>
额外注意事项
- 确保你的
settings.py中配置了LOGIN_REDIRECT_URL(登录成功后跳转的地址),比如:LOGIN_REDIRECT_URL = '/' - 如果需要自定义登录模板,可以在
LoginView.as_view()中指定template_name参数,比如:path('login/', auth_views.LoginView.as_view(template_name='your_app/login.html'), name='login'),
这样修改后,反向解析就能正确找到登录视图的URL,不会再出现NoReverseMatch错误了。
内容的提问来源于stack exchange,提问作者Maryo David
相关产品推荐
相关产品推荐

