因此,我尝试在Django应用中建立注销链接。我已经设置了一个视图,该视图注销用户,然后将其重定向到模板paginaPrincinal.html,该模板具有两个用于登录和注册的按钮。
问题是由于某种原因,我在index.html中创建的链接href不会出现。
我的views.py
def login_view(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
user = form.get_user()
login(request, user)
return redirect('index')
else:
form = AuthenticationForm()
return render(request, 'registration/login.html', {'form': form})
def logout_view(request):
logout(request)
return redirect('paginaPrincipal')
我的urls.py
path('principal/', views.intro, name='pagina_principal'),
path('registro/', views.registro_usuario, name='registro_usuario'),
path('login/', views.login_view, name="login"),
path('logout/', views.logout_view, name="logout"),
path('',views.index, name ='index'),
index.html
{% block contenido %}
<div>
<ul>
{% if user.is_authenticated %}
<li>Hola, {{user.username}}</li>
<li><a href="{% url 'logout' %}"></a></li>
{% endif %}
</ul>
</div>
{% endblock %}
如果我检查代码并尝试转到Href,则会出现以下错误:
在/ myapp2 / logout /下的NoReverseMatch 找不到'paginaPrincipal'的反向符号。 'paginaPrincipal'不是有效的视图函数或模式名称。
答案 0 :(得分:1)
您传递给redirect
的字符串应该是网址路由名称。问题是'paginaPrincipal' != 'pagina_principal'
def logout_view(request):
logout(request)
return redirect('pagina_principal')
那应该解决它。
答案 1 :(得分:1)
您将重定向到"paginaPrincipal"
,但是您已经定义了"pagina_principal"
。您必须更改视图功能
def logout_view(request):
logout(request)
return redirect('pagina_principal')
答案 2 :(得分:0)
NoReverseMatch 意味着你必须在 urls.py 中设置 app_name 就像
app_name= "app_name"
在模板中
<a href="{% url 'app_name:logout' %}"></a>
它应该工作