为什么我的注销链接在Django应用中不起作用?

时间:2019-12-10 18:56:58

标签: html django django-templates django-views

因此,我尝试在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'不是有效的视图函数或模式名称。

3 个答案:

答案 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>

它应该工作