我正在尝试制作一个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,所以您需要在爬网程序命名空间之后传递一个额外的参数。