我可以使用Django的“url”标记引用包含的URLConf中的命名URL吗?

时间:2009-08-03 17:00:32

标签: django

在我的Django项目中,我曾经在项目的根目录中有一个URLConf,urls.py。这个URLConf包含一些使用Django url()函数的命名URL。在多个模板中,我使用url标记àla{% url named_url %}引用这些网址。这很好。

urls.py变得有点笨拙,因此我将其分解为app/urls.py中每个应用的URLConf。有些网址仍有名称。不幸的是,我现在在模板中使用TemplateSyntaxException标记时获得url。具体来说,错误消息是:

  

渲染时捕获异常:反向'myproj.myapp.new_test',参数'()'和关键字参数'{}'未找到。

有没有办法在Django中使用url标记在特定于应用程序的URLConfs中引用指定的URL?

4 个答案:

答案 0 :(得分:1)

您绝对可以通过url标记引用包含的urlconf中的网址 - 这实际上就是您应该做的事情。但是,我总是发现url标记和reverse()函数非常脆弱且容易出错,因此有时会发生这些错误。

我的建议是给你的网址所有一个名字,无论他们在哪个urlconf。然后你只需要参考实际的名字 - 你不需要用它来限定它应用程序或urlconf或其他任何名称。看看是否有效。

答案 1 :(得分:0)

您是否引用了每个应用的urls.py?

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^app1/',        include('app1.urls')),
    (r'^app2/', include('app2.urls')),
)

来自Django Docs

答案 2 :(得分:0)

可能对你没用,但希望对下一个寻找答案的人有用:

我正在使用Django 1.4,为我解决的是在模板标签中没有使用引号:

{% url 'name_of_view' some_var %}

成了这个:

{% url name_of_view some_var %}

治愈了。我没有在django文档中看到任何提及,文档中的示例使用引号。所以这似乎是一个小小的车,但希望有人不会拔出他们的头发。

https://docs.djangoproject.com/en/dev/topics/http/urls/#naming-url-patterns

答案 3 :(得分:-1)

我可以向你推荐两件事:

  • Use name in url patterns
  • 不要在应用程序中引用项目名称(就像你使用“myproj.myapp.new_test”一样。如果这是“正确的方法”,你应该只引用“myapp.new_test”