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'模板标签错误的主要内容,如果未能解决你的问题,请参考以下文章

更改模板标签后,John Resig 的微模板出现语法错误 <# % 等

Django 自定义模板标签抛出错误

django 模板 URL 标签错误

错误:选择器与模板标签不匹配

Django 模板标签从错误的日期显示对象

反应原生底部标签导航错误,来自博览会模板的全新应用