如何解决找不到反向匹配的问题?
Posted
技术标签:
【中文标题】如何解决找不到反向匹配的问题?【英文标题】:how do i resolve the issue of no reverse match found? 【发布时间】:2021-11-30 13:11:33 【问题描述】:django.urls.exceptions.NoReverseMatch: Rever\Python\Python39\lib\site-packages\django\urls\resolvers.py",第 694 行,在 _reverse 未找到“user_login”的 se。 '用户登录' 不是有效的视图函数或模式名称
我认为主要问题在于 URL 映射,因为我对此很陌生,我只是通过观看视频讲座来练习,而那个人正在使用一些旧版本的 django,而那个人使用的 URL 映射涉及 reular 表达式即 ^ 和 $ 符号。他第一次将美元符号放在 url 链接的末尾,我在 django 3+ 中找不到任何替代品,因为我使用 Path 函数进行映射而不是正则表达式。
Views.py
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request, user)
return HttpResponseRedirect(reverse('index'))
else:
return HttpResponse("Account not Active")
else:
print("Someone tried to login and failed")
print("Username: and Password ".format(username,
password))
return HttpResponse("invalid login details supplied!")
else:
return render(request, 'basicapp/login.html',)
来自基本应用的 urls.py
from django.conf.urls import url
from django.urls import path
from basicapp import views
app_name = 'basicapp'
urlpatterns = [
path('register/', views.register, name= 'register'),
path('user_login/', views.user_login, name= 'login'),
]
来自项目的 urls.py
from django.contrib import admin
from django.urls import path, include
from basicapp import views
urlpatterns = [
path('admin/', admin.site.urls),
path ('',views.index, name ='index'),
path ('basicapp/', include('basicapp.urls')),
path ('logout/', views.user_logout, name='logout'),
path ('special/', views.special, name = 'special'),
]
基本模板调用
<div class="container">
<ul class="nav navbar-nav">
<li><a class='navbar-brand' href="% url 'index' %">DJANGO</a></li>
<li><a class="navbar-link " href="% url 'admin:index' %">Admin</a></li>
<li><a class="navbar-link" href="% url 'basicapp:register' %">Register</a></li>
% if user.is_authenticated %
<li><a class='navbar-link' href="% url 'logout' %">Logout</a></li>
% else %
<li><a class="navbar-link" href="% url 'basicapp:user_login' %">Login</a></li>
% endif %
【问题讨论】:
请包含使用代码块的代码```不是截图 请看一下 【参考方案1】:导入 reverse_lazy 并尝试替换
reverse('index')
有
reverse_lazy('index')
【讨论】:
我确实解决了这个问题,谢谢。但实际上对我有用的是更改 URL 模式列表中引用 user_login, urlpatterns = [ path('register/', views.register, name= 'register'), path('user_login/', views. user_login, name= 'user_login'), ]以上是关于如何解决找不到反向匹配的问题?的主要内容,如果未能解决你的问题,请参考以下文章
找不到 XmlTextReader/XmlNodeType 命名空间,如何解决?
Node.js / Mongoose上的“VersionError:找不到匹配的文档”错误