Django 2.0自定义认证视图报错:找不到'dashboard'视图或路由名称
首先先把你遇到的错误信息贴出来方便定位:
内部服务器错误:/account/login/... django.urls.exceptions.NoReverseMatch: 找不到'dashboard'的反向解析。'dashboard'不是有效的视图函数或路由名称。[04/Apr/2018 17:12:15] "POST /account/login/ HT...
这问题我之前调试登录功能时也踩过坑,咱们从几个核心点排查:
第一步:确认
dashboard路由是否正确命名
打开对应应用的urls.py,检查指向dashboard视图的路径是否设置了name='dashboard',正确的写法应该是这样:# 比如在account/urls.py里 from django.urls import path from . import views urlpatterns = [ # 其他路由... path('dashboard/', views.dashboard_view, name='dashboard'), # 关键是name参数 ]如果你的dashboard是在另一个应用里,还要确认根
urls.py里有没有正确include这个应用的路由。第二步:检查反向解析的调用是否正确
登录成功后你应该是用了reverse('dashboard')或者模板里的{% url 'dashboard' %}来跳转,这里要注意:- 有没有拼写错误?Django的路由名称是区分大小写的,别把
dashboard写成Dashboard或者dashbord了 - 如果你的应用用了命名空间(比如根urls里是
path('account/', include('account.urls', namespace='account'))),那反向解析要写成reverse('account:dashboard')或者模板里{% url 'account:dashboard' %}
- 有没有拼写错误?Django的路由名称是区分大小写的,别把
第三步:重启开发服务器清缓存
有时候Django开发环境会缓存旧的路由配置,哪怕你刚改完urls.py也可能不生效,直接重启一下runserver试试,很多时候这步就能解决问题。第四步:检查登录视图的跳转逻辑
打开你的登录视图函数(比如views.login_view),看看登录成功后的跳转代码是不是写错了。比如如果用redirect的话,应该是:from django.shortcuts import redirect, reverse def login_view(request): if request.method == 'POST': # 验证逻辑... return redirect(reverse('dashboard')) # 或者直接redirect('dashboard'),但用reverse更明确这里的名称一定要和urls里的name完全一致。
如果上面几步都排查过还是有问题,可以把你的urls.py代码和登录视图的跳转部分贴出来,能更精准定位~
内容的提问来源于stack exchange,提问作者ralfillo

