如何解决找不到反向匹配的问题?

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'), ]

以上是关于如何解决找不到反向匹配的问题?的主要内容,如果未能解决你的问题,请参考以下文章

xcode 上传到应用商店 - 找不到匹配的配置文件

找不到 XmlTextReader/XmlNodeType 命名空间,如何解决?

如何解决错误消息“找不到模块‘缩写’

Node.js / Mongoose上的“VersionError:找不到匹配的文档”错误

如何解决OrCAD Capture 16.5找不到License

如何解决错误“找不到图像”?