2012-12-09 65 views
2

在我最後一個問題中,我問了如何讓urls在包含urls.py之前爲參數工作並且工作。 Django {% url %} when urls with parameters like: url(r'^foo/<parameter>/$', include(some.urls))django url參數之前包含url與命名空間

現在我想使用包括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 %} 

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

我的問題:難道我有一個錯誤在我的代碼或代碼沒有用,我想要做什麼。

回答

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被解析爲正確。我從{% url foo:bar 1 %}得到/foo/1/bar/而不是/foo/(?P<parameter_1>%5Cd+)/bar/

+0

有趣!我遇到了同樣的問題,並發現這是django反向方法中的一個錯誤。不幸的是,我的項目使用了一個(痛苦)老版本的Django(1.3)。我最終改變了url結構,所以父urlconf沒有捕獲任何參數。但是你是否知道解決這個問題的方法,這並不意味着要更新到最新的django版本? (我猜這是我最終會做的事情) – acrespo