【问题标题】: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 参数。我确定我遗漏了一些明显的东西,但我不确定它是什么。

【问题讨论】:

    标签: django url reverse logout


    【解决方案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 的。
      猜你喜欢
      • 2011-03-04
      • 2012-09-10
      • 2013-09-01
      • 2016-08-12
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2011-10-05
      • 2018-03-14
      相关资源
      最近更新 更多