2013-04-23 45 views
0

我和一些老的Django代碼和url功能時,不會在任何地方使用,類似的例子在the Django 1.4 documentation爲什麼在Django 1.5文檔中經常使用url函數?

from django.conf.urls import patterns, url, include 

urlpatterns = patterns('', 
    (r'^articles/2003/$', 'news.views.special_case_2003'), 
    (r'^articles/(\d{4})/$', 'news.views.year_archive'), 
    (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), 
    (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'), 
) 

,但我注意到the Django 1.5 documentationurl功能經常被用到:

from django.conf.urls import patterns, url 

urlpatterns = patterns('', 
    url(r'^articles/2003/$', 'news.views.special_case_2003'), 
    url(r'^articles/(\d{4})/$', 'news.views.year_archive'), 
    url(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), 
    url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'), 
) 

這是爲什麼?這是一個慣例,還是有技術上的理由來使用url函數?我將來應該遵循哪種做法,以及如何在不調用url調用的情況下維護我的遺留代碼?

+0

我沒有答案,但試圖從Django 1.5應用程序中刪除'url'並且它拋出一個錯誤。所以這可能不只是一個約定,它必須是必要的 – romainberger 2013-04-23 21:58:04

+0

@romainberger Django 1.5教程不使用它:https://docs.djangoproject.com/en/1.5/intro/overview/,文檔中提到的元組是精細。您的錯誤必須存在於其他地方,或者教程已過時。 – millimoose 2013-04-23 22:02:35

+0

技術原因是您可以在函數中使用命名參數,這在元組的大多數成員是可選的時很方便。我的猜測是'url()'只是爲可選元素添加了理智的默認值並返回一個元組。 (看到你設置了一個Django環境,你可以很容易地直接嘗試在REPL中調用'url()'。) – millimoose 2013-04-23 22:10:09

回答

2

docs

URL(正則表達式,視圖,kwargs =無,名=無,前綴= '')

您可以使用url()函數,而不是一個元組,作爲patterns()的參數。如果你想指定一個沒有可選的額外參數字典的名字,這很方便。例如:

urlpatterns = patterns('', 
    url(r'^index/$', index_view, name="main-view"), 
    ... 
) 

你使用它們反向URL匹配(同樣,docs

您可以在第一個例子轉換爲:

url(r'^articles/2003/$', special_case_2003, name="special_case_2003"), 

,並調用它的template

{% url special_case_2003 %} 

是的,也許你發佈的兩個例子有點太模糊了這個

+0

這實際上並沒有回答OP的問題。 – millimoose 2013-04-23 22:06:29

+0

另外,在不使用'url()'的情況下,反轉URL應該可以正常工作。我打賭美元甜甜圈功能只是返回一個元組。 – millimoose 2013-04-23 22:08:38

+1

是的:在Django中,反向URL匹配是一種常見的做法。這就是1.5文檔儘可能經常使用它的原因。因爲它是一個最佳實踐。 – 2013-04-23 22:09:16

相關問題