Django报错NoReverseMatch:未找到'user_login'匹配项该如何解决?
django.urls.exceptions.NoReverseMatch: Reverse for 'user_login' not found. 'user_login' is not a valid view function or pattern name
问题原因
你的报错核心是路由命名和模板调用的名称不匹配,和path函数有没有类似正则$的符号无关。
你在basicapp/urls.py里给登录路由设置的name属性是login:
path('user_login/', views.user_login, name= 'login'),
但模板里调用路由时写的是{% url 'basicapp:user_login' %},系统找不到名为user_login的子应用路由,就触发了匹配错误。
解决方案
二选一即可:
- 修改
basicapp/urls.py的路由命名,把name改为user_loginpath('user_login/', views.user_login, name= 'user_login'), - 修改模板中的路由调用代码,改为匹配已有的命名
<li><a class="navbar-link" href="{% url 'basicapp:login' %}">Login</a></li>
关于Django3+ path函数的补充说明
你之前的疑问是找不到正则$的替代方案,实际上path函数默认就是完全路径匹配,效果和旧版本url(r'^路径/$')的写法完全一致,不需要额外加任何符号,你原本的path写法没有问题,不是本次报错的原因。
额外优化建议
你basicapp/urls.py里的app_name = 'basicapp'前面有多余的缩进,建议改成顶格书写,避免后续出现语法隐患。
内容的提问来源于stack exchange,提问作者user31538
相关产品推荐
相关产品推荐

