django url参数在包含带命名空间的url之前

时间:2012-12-09 13:58:15

标签: django django-templates django-urls

在我的上一个问题中,我问过如何在包含urls.py之前让url为参数工作并且它有效。 Django {% url %} when urls with parameters like: url(r'^foo/<parameter>/$', include(some.urls))

现在我想使用相同的urls.py 包含名称空间

urls.py

urlpatterns = patterns('',
    url(r'^/foo/(?P<parameter_1>\d+)/', include('bar.urls', namespace='foo', app_name='foo')),
    )

bar.urls.py

urlpatterns = patterns('',
    url(r'^/bar/$', 'bar.views.index', name='bar'),
    url(r'^/bar/(?P<parameter_2>\d+)/$', 'bar.views.detail', name='bar_detail'),
    )

要获取模板中的网址,我使用:

1. {% url foo:bar parameter_1=1 %} or {% url for:bar 1 %}
2. {% url foo:bar_detail parameter_1=1 parameter_2=1 %} or {% url foo:bar_detail 1 1 %}

我希望得到网址:1。/foo/1/bar/和2. /foo/1/bar/1,但它不起作用。

有趣:如果我打电话:

1. {% url foo:bar %}
2. {% url foo:bar_detail parameter_2=1 %} or {% url foo:bar_detail 1 %}

我得到了网址: 1. /foo/(?P<parameter_1>%5Cd+)/bar/和 2. /foo/(?P<parameter_1>%5d+)/bar/1

我的问题:我的代码是否有错误,或者代码对我想做的事情没用。

1 个答案:

答案 0 :(得分:2)

我再次搜查并发现了错误。 /django/core/urlresolvers.py中有一个错误。

我在https://code.djangoproject.com/ticket/11559#no1找到了门票。

要解决此问题,您必须将/django/core/urlresolvers.py替换为https://github.com/django/django/commit/02dcbe3317中已更改的文件。

使用python manage.py runserver重新启动def-server后,url-tags的解析正确无误。我从/foo/1/bar/而不是{% url foo:bar 1 %}获得/foo/(?P<parameter_1>%5Cd+)/bar/