django'url'模板标签错误
Posted
技术标签:
【中文标题】django\'url\'模板标签错误【英文标题】:django 'url' template tag errordjango'url'模板标签错误 【发布时间】:2010-11-25 03:24:33 【问题描述】:我的 URLconf 包含这个模式:
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
参数。我确定我遗漏了一些明显的东西,但我不确定它是什么。
【问题讨论】:
【参考方案1】:基本上,Django 的 URL 调度程序正在查看 urlconf 和那个参数并说“我不知道把这个参数放在哪里”,因为它不查看 url 指向的视图函数,只查看 urlconf 和模式在里面。
现在,您的 url 模式中没有该参数的位置。
即如果您为 django.contrib.auth.views.logout 编写自己的模式或从自己的视图调用它,而不是从其默认的 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"),
希望有帮助!
【讨论】:
【参考方案2】:是的,你是对的,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>
【讨论】:
非常感谢。不知道我是如何忽略 REDIRECT_FIELD_NAME 的。以上是关于django'url'模板标签错误的主要内容,如果未能解决你的问题,请参考以下文章