2015-12-21 45 views
-1

我是Django的新手,我想了解它。如果我寫這樣的url模式Django url模式的第三個參數是什麼?

url(r'^$', 'newsletter.views.home', name='home'), 

它的工作原理。而如果我把它寫這樣

url(r'^$', 'newsletter.views.home'), 

它仍然有效,但我從服務器獲取以下數據

RemovedInDjango110Warning:字符串視圖參數的URL支持()已被棄用,將在Django被刪除1.10(獲得newsletter.views.contact)。代之以傳遞可調用信息。 url(r'^ contact/$','newsletter.views.contact'),

我的第一個問題是第三個參數做什麼。在

name='home' or name='contact'. What is it reffering to. 

和我的第二個問題是什麼呢

Pass the callable instead. 

是什麼意思?再次,我已經閱讀了文檔,並在這裏以更爲清晰的外行人的名義來到這裏。歡迎所有的幫助和建議

+0

請注意'kwargs'是[url patterns]的第三個參數(https://docs.djangoproject.com/en/1.9/ref/urls/#django.conf.urls.url)。由於它是可選的,所以可以省略它,並且包括'name'作爲關鍵字參數,例如'名='home''。 – Alasdair

+0

無論您是否在URL模式中使用'name',您都應該得到相同的棄用警告。 – Alasdair

回答

4

當它說通過可調用,這意味着你應該導入視圖本身,並將其包含在你的url模式。

from newsletter.views import home 

url(r'^$', home, name='home'), 

另一種選擇是導入views模塊本身

# renaming allows us to import more than one views at once 
from newsletter import views as newsletter_views 

url(r'^$', newsletter_views.home, name='home'), 

命名URL模式可以反轉URL模式(例如,從名稱到一個URL)。這意味着您不必在視圖和模板中硬編碼網址。

如果你有

url(r'^home/$', home, name='home'), 

那麼您可以在您的模板在代碼中使用reverse('home'){% url 'home' %},而不是重複寫入/home/

+0

感謝您的回覆。所以要清楚,在你提供的例子中不再需要第三個參數,對吧?名稱='home'部分或name ='contact'不再需要,因爲我正在導入視圖。 – losee

+1

這是**總是**好的做法,爲您的網址命名。棄用警告與您是否爲您的網址命名無關。但是,它曾經可以在url標記中使用字符串「newsletter_views.home」,即{{%url'newsletter.views.home'%}''。對於Django 1.10+,這將不再起作用,並且您必須**命名您的url模式以便能夠將它們取消。 – Alasdair

+0

@alsdair我剛剛嘗試了從newsletter newsletter導航視圖中提供的建議,因爲newsletter_views和新聞快訊和視圖都出現了錯誤 – losee

相關問題