【问题标题】:Django url templatetag (but not reverse() ) error: Caught NoReverseMatch while renderingDjango url templatetag(但不是 reverse() )错误:渲染时捕获 NoReverseMatch
【发布时间】:2011-07-06 16:34:45
【问题描述】:

我正在尝试这样使用 url 模板标签:

{% url all-labs-map %}

但是当我查看页面时,我得到了这个错误:

Caught NoReverseMatch while rendering: Reverse for 'all-labs-map' with arguments '()' and keyword arguments '{}' not found.

当我像这样使用模板标签时:

{% url gmaps.views.all_labs %}

它工作得很好。

这是网址配置:

urlpatterns = patterns('gmaps.views',
    url(r'^lab_list/$', 'all_labs', name="all-labs-map" ),
)

我尝试使用 django shell 来查看命名 URL 是否有问题,但是使用

reverse('all-labs-map') 

返回正确的 URL。

对正在发生的事情有任何想法吗?

谢谢!

马吉德

编辑:

我在 ubuntu 上使用 django 1.2 和 nginx 服务器、gunicorn 和 virtualenv。我在加载库的自定义标签上遇到了另一个问题,但是即使我使用了正确的标签注册语法,也无法识别标签本身。任何想法将不胜感激!

【问题讨论】:

  • 看起来你做的一切都是正确的并且有一个谜。想清楚后请更新。
  • 我唯一能想到的是,您在对 urls.py 等进行更改后是否重新启动了 nginx 服务?根据经验,您应该在更改任何 .py 文件后重新启动服务 - 不这样做会导致 reverse() 和 {% url %} 间歇性地工作而不工作
  • @skyl 是对的,URLNode 最终会调用 reverse('all-labs-map', (), {}, contex.current_app),这对你有用,所以它肯定是别的东西。
  • 只是为了确保,我确实重新启动了 nginx,但问题仍然存在。
  • 知道这里发生了什么吗?

标签: django django-urls


【解决方案1】:

这在 Google 搜索结果中仍然很高,但还没有人正确回答。关键是:

{% load url from future %}

在 Django 1.3 之前,这是 url 模板标签的语法:

{% url view_name arg1 %}

在 Django 1.5 中,语法如下:

{% url "view_name" arg1 %}

Starting in Django 1.3,旧版本可以工作,但会给你一个弃用警告,告诉你{% load url from future %} 并切换到该模板标签的新版本,为 Django 1.5 做准备

【讨论】:

    【解决方案2】:

    您是否尝试过将网址的名称用引号括起来,如下所示:

    {% url "all-labs-map" %}
    

    {% url 'all-labs-map' %}
    

    我曾经遇到过一些 URL 问题,这似乎有所帮助。 另外关于@user608133 评论 - 你需要重启 gunicorn 而不是 nginx,因为 nginx 只是一个代理......

    【讨论】:

    • 我的情况正好相反——在单打中不起作用,但在没有引号的情况下它起作用了。文档也用引号括起来..
    • 就我而言,我遇到了这种错误(命名为 url,在视图和 shell 中工作,但引发了模板错误)。你的帖子让我关注报价和中提琴! - 当我删除它们时它开始工作。这是一种奇怪的行为,但这是事实......
    • 很高兴它对你们有所帮助。随着时间的推移,我也经历了一些不可预测的行为......也许这只是 Django 的不同版本......
    【解决方案3】:

    如果您有另一个同名的 url 覆盖需要多个参数的这个,则可能会发生此错误。在整个项目中搜索“all-labs-map”时是否发现任何重复项?

    【讨论】:

    • 我上面提到的唯一一个名为 all-labs-map 的 URL。
    • 嗯...这是另一个基本的想法...但是主 urls 文件是否有可能没有指向 gmaps.urls?
    • 好吧,如果没有指向 reverse('all-labs-map') 将不起作用,因为 url(r'^lab_list/$', 'all_labs', name="all- labs-map"),在我的 gmaps.urls 中。无论如何,感谢您的尝试;)如果您有更多想法,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2013-12-27
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多