注销后如何在next_page参数中使用命名url重定向?

时间:2016-06-01 05:31:03

标签: django django-templates django-views

我在其中一个应用的urls.py文件中有以下代码。

from django.conf.urls import url
from .views import *

urlpatterns = [
    url(r'^signup/$', SignUpView.as_view(), name="signup"),
    url(r'^login/$', LoginView.as_view(), name="login"),
    url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}, name="logout"),
]

我想使用'home'或'index'之类的命名参数,而不是使用'/'作为'next_page'参数值。我该怎么办?

2 个答案:

答案 0 :(得分:1)

您可以对需要从网址名称获取实际网址的所有情况使用reverse_lazy()。

from django.core.urlresolvers import reverse_lazy

urlpatterns = [
    url(r'^signup/$', SignUpView.as_view(), name="signup"),
    url(r'^login/$', LoginView.as_view(), name="login"),
    url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': reverse_lazy('home')}, name="logout"),
]

答案 1 :(得分:1)

您只需将视图的反向名称作为next_page参数的值传递为django.contrib.auth.views.logout uses django.shortcuts.resolve_url,其文档描述为

  

返回适合传递的参数的URL。   争论可能是:

     
      
  • 模型:将调用模型的get_absolute_url()函数。
  •   
  • 视图名称,可能包含参数:urlresolvers.reverse()   用于反向解析名称。
  •   
  • 一个URL,将按原样返回。
  •