sat*_*ace 9 django url reverse logout
我的URLconf包含以下模式:
url(r'^accounts/logout/$','django.contrib.auth.views.logout', name="logout"),
Run Code Online (Sandbox Code Playgroud)
我试图在带有URL标记的模板中反转它,如下所示:
<a href="{% url logout next_page=request.path %}">logout</a>
Run Code Online (Sandbox Code Playgroud)
但我不断收到以下错误:
Reverse for 'logout' with arguments '()' and keyword arguments '{'next_page': u'/first-page/child/'}' not found
Run Code Online (Sandbox Code Playgroud)
我认为django.contrib.auth.views.logout应该采取一个选项next_page参数.我确定我错过了一些明显的东西,但我不确定它是什么.
是的,你是对的,django.contrib.auth.views.logout接受一个可选的"next_page"参数,但不要忘记"url"标签与urlconf模式匹配,而不是视图,所以它不知道是什么或者不是视图的参数.因此,这意味着你需要"next_page"的正则表达式为上面的图案,你可以做一个命名组,但有处理重定向一个更简单的方法...
查看django.contrib.auth.views.logout,您可以看到在没有"next_page"参数的情况下,视图会重定向到request.GET或request.POST中提供的任何url,其中包含"redirect_field_name"键,默认为"REDIRECT_FIELD_NAME"的参数,默认为字符串"next".因此,保留urlconf的方式,您可以在模板中执行以下操作:
<a href='{% url logout %}?next={{ request.path }}'>logout</a>
Run Code Online (Sandbox Code Playgroud)
基本上Django的URL调度程序正在查看urlconf和该参数,并说"我不知道在哪里放置此参数",因为它不会查看url指向的视图函数,只查看urlconf及其中的模式.
现在,你的网址模式中没有地方可用于该论点.
也就是说,如果您为它编写自己的模式,或者如果您从自己的视图中调用它,而不是从其默认的url模式调用它,则可以使用额外的参数调用django.contrib.auth.views.logout.
其中一个url模式可能适合您(未经测试):
url(r'^accounts/logout/(?P<next_page>.*)?$','django.contrib.auth.views.logout', name="logout"),
url(r'^accounts/logout/$','django.contrib.auth.views.logout', kwargs={'next_page':None}, name="logout"),
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
4484 次 |
| 最近记录: |