Django的“网址”模板标签错误
题
我的URL配置包含此图案:
url(r'^accounts/logout/$','django.contrib.auth.views.logout', name="logout"),
和我一直试图扭转在与这样的URL标签模板:
<a href="{% url logout next_page=request.path %}">logout</a>
不过,我不断收到以下错误:
Reverse for 'logout' with arguments '()' and keyword arguments '{'next_page': u'/first-page/child/'}' not found
我想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”参数,有观点重定向URL无论在任或request.GET中使用request.POST键“redirect_field_name”提供给,一个参数,默认为“REDIRECT_FIELD_NAME”这又默认字符串“下一步”。所以离开你的URLconf事情是这样的,你可以做这样的事情在你的模板:
<a href='{% url logout %}?next={{ request.path }}'>logout</a>
其他提示
基本上Django的URL调度员正在研究URL配置和参数,并说:“我不知道在哪里把这个说法”,因为它不看的视图功能的URL指向,只有URL配置和模式在它
现在有一个在为这样的说法你的URL模式的地方。
即。如果从它的默认URL模式编写自己的模式进行,或者如果您从自己的视图调用它,而不是你可以调用django.contrib.auth.views.logout与额外的参数。
一这些网址格式的可能为你工作(未测试):
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"),
希望帮助!
不隶属于 StackOverflow