在/处没有反向匹配,爬网程序不是已注册的命名空间



我正在尝试制作一个codeforces爬网程序,我只是在不知何故失败的实现中添加了用户身份验证。Reverse not match and crawler is not a registered namespace是我得到的错误。我不知道到底需要放什么文件在这里,所以请问我,如果你需要,我会发布它们。我只是一个初学者,我需要帮助。

爬网程序/urls.py

app_name = 'crawler'
urlpatterns = [
path('',views.index,name='index'),
path('formpage/',views.search_form_view , name='searchform'),
path('formpage/<str:handle>',views.person, name= 'person'),
path('user_login/',views.user_login,name ="user_login"),
path('logout/',views.user_logout,name="logout"),
]

base.html

<body>
<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
<!-- Brand -->
<a class="navbar-brand" href="{% url 'crawler:index'%}">Crawler</a>
<!-- Links -->
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="{% url 'crawler:searchform'%}">Search</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link 2</a>
</li>
{% if user.is_authenticated %}
<li class="nav-item">
<a class="nav-link" href="{%url 'crawler : logout'%}">Log Out</a>
</li>
{% else %}
<li class="nav-item">
<a class="nav-link" href="{%url 'crawler :user_login'%}">Login</a>
{% endif %}
</li>
</li>
</ul>
</nav>
<br>
{% block body_block %}
{% endblock %}
</body>

视图.py

@login_required
def user_logout(request):
logout(request)
return HttpResponse(reverse('index'))

webcrawler/urls.py

app_name = 'crawler'
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('crawler.urls',namespace= "crawler")),
]

这里有两部分答案。

没有反向匹配

重点是,在您的main和appurls.py中,您将两个URL都注册为",这意味着在(空字符串(处会有匹配项,但在"/"处不会有匹配项。要解决此问题,只需在mainurls.py中添加"/",因为这是一种更好的做法。

爬网程序不是已注册的命名空间

当您调用URL时,它应该是{% url 'crawler:index' %}{% url 'crawler:searchform' %}之类的,因为爬网程序是主命名空间,但它下面有多个URL,所以您需要在爬网程序命名空间之后传递一个额外的参数。

最新更新