2014-08-27 112 views
2

說我有一個URL設置像這樣在我的Django 1.6項目:重定向到包含網址,RedirectView的

urlpatterns = patterns('', 
    url(r'^some-path/', include('someapp.urls')), 
    url(r'^$', RedirectView.as_view(url='some-path/', permanent=False)), 
) 

...但我想改變「一些路徑」,以「改變路徑」,而是和在這個過程中意識到我已經在一個額外的地方硬編碼:RedirectView設置!

有沒有適當的方式來做這樣的事情,扭轉到一個包含的網址捆綁?所有的

# NOT WORKING! Django ignores `name=` when using `include()` 
urlpatterns = patterns('', 
    url(r'^changed-path/', include('someapp.urls'), name='foo'), 
    url(r'^$', RedirectView.as_view(pattern_name='foo', permanent=False)), 
) 

回答

3

首先,你必須去從someapp您urls.py文件,你的基礎URL的名稱。 讓我們假設它是這樣的:

# someapp/urls.py 
urlpatterns = patterns(
    'someapp.views', 
    url(r'^$', 'your view', name='foo'), 
    ... 
) 
在主網址,文件

而現在,你可以寫的一切是這樣的:

# WORKING! Because Django likes namespaces 
urlpatterns = patterns('', 
    url(r'^changed-path/', include('someapp.urls', namespace='bar')), 
    url(r'^$', RedirectView.as_view(pattern_name='bar:foo', permanent=False)), 
) 
+0

謝謝;我特別欣賞命名空間示例。不幸的是,這也是我害怕的 - 在重複自己(如我的問題)或者必須將父邏輯與孩子的內部細節(如在答案中)綁定之間似乎是一個不好的選擇。我認爲你的後一種方式可能會更好,因爲無論何時我構建URL,我都需要知道跨應用的名稱。 – natevw 2014-08-29 17:31:06