Django模板标签:如何在{url auth_logout}中发送next_page?

Bjö*_*lja 19 django

我有一行urls.py:

url(r'^logout/$', 'django.contrib.auth.views.logout', name="auth_logout"),
Run Code Online (Sandbox Code Playgroud)

在我的模板标签中,我有这一行:

<a href="{% url auth_logout %}">Logout</a>
Run Code Online (Sandbox Code Playgroud)

现在,我想将next_page参数添加到url templatetag,但我无法让它工作.我试过这个:

{% url auth_logout request.path %}"
Run Code Online (Sandbox Code Playgroud)

...还有这个:

{% url auth_logout request,request.path %}
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用.如何使用url templatetag为可选的next_page参数提供该功能?

谢谢!

小智 27

对于它的价值,我使用这个:

<a href="{% url auth_logout %}?next=/">Logout</a>
Run Code Online (Sandbox Code Playgroud)

  • 这是最简单的解决方案.我不明白为什么每个人都在支持需要添加专门网址模式的解决方案...... (2认同)

hug*_*own 26

两件事情:

  1. django.contrib.auth.views.logout()采用您未提供的可选next_page
  2. url templatetag有逗号分隔的参数

所以,首先修改你的url以接受next_page你的URLConf需要修改才能传递到下一页,对于硬编码的重定向,这样的事情:

url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}, name='auth_logout'), 
Run Code Online (Sandbox Code Playgroud)

和一个参数化结果:

url(r'^logout/(?P<next_page>.*)/$', 'django.contrib.auth.views.logout', name='auth_logout_next'), 
Run Code Online (Sandbox Code Playgroud)

然后修改您的模板以传递next_page

<a href="{% url auth_logout_next /some/location %}">Logout</a>
Run Code Online (Sandbox Code Playgroud)


Wim*_*jen 7

Sander Smits拥有最简单的解决方案.在你的情况下使用:

<a href="{% url "auth_logout" %}?next={{ request.path|urlencode }}">Logout</a>
Run Code Online (Sandbox Code Playgroud)

在更一般的情况下,使用:

<a href="{% url "auth_logout" %}?next={% url "my_url" my_params |urlencode %}">Logout</a>
Run Code Online (Sandbox Code Playgroud)