在Django的URLconf中進(jìn)行函數(shù)導(dǎo)入的方法
看下這個(gè) URLconf:
from django.conf.urls.defaults import * from mysite.views import hello, current_datetime, hours_ahead urlpatterns = patterns('', (r'^hello/$', hello), (r'^time/$', current_datetime), (r'^time/plus/(\d{1,2})/$', hours_ahead), )
在 URLconf 中的每一個(gè)入口包括了它所關(guān)聯(lián)的視圖函數(shù),直接傳入了一個(gè)函數(shù)對象。 這就意味著需要在模塊開始處導(dǎo)入視圖函數(shù)。
但隨著 Django 應(yīng)用變得復(fù)雜,它的 URLconf 也在增長,并且維護(hù)這些導(dǎo)入可能使得管理變麻煩。 (對每個(gè)新的view函數(shù),你不得不記住要導(dǎo)入它,并且采用這種方法會(huì)使導(dǎo)入語句將變得相當(dāng)長。)可以通過導(dǎo)入 views 模塊本身來避免這個(gè)麻煩。 下面例子的URLconf與前一個(gè)等價(jià):
from django.conf.urls.defaults import * **from mysite import views** urlpatterns = patterns('', (r'^hello/$', **views.hello** ), (r'^time/$', **views.current_datetime** ), (r'^time/plus/(d{1,2})/$', **views.hours_ahead** ), )
Django 還提供了另一種方法可以在 URLconf 中為某個(gè)特別的模式指定視圖函數(shù): 你可以傳入一個(gè)包含模塊名和函數(shù)名的字符串,而不是函數(shù)對象本身。 繼續(xù)示例:
from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^hello/$', **'mysite.views.hello'** ), (r'^time/$', **'mysite.views.current_datetime'** ), (r'^time/plus/(d{1,2})/$', **'mysite.views.hours_ahead'** ), )
(注意視圖名前后的引號(hào)。 應(yīng)該使用帶引號(hào)的 'mysite.views.current_datetime' 而不是 mysite.views.current_datetime 。)
使用這個(gè)技術(shù),就不必導(dǎo)入視圖函數(shù)了;Django 會(huì)在第一次需要它時(shí)根據(jù)字符串所描述的視圖函數(shù)的名字和路徑,導(dǎo)入合適的視圖函數(shù)。
當(dāng)使用字符串技術(shù)時(shí),你可以采用更簡化的方式:提取出一個(gè)公共視圖前綴。 在我們的URLconf例子中,每個(gè)視圖字符串的開始部分都是``\,造成重復(fù)輸入。 我們可以把公共的前綴提取出來,作為第一個(gè)參數(shù)傳給\ ``函數(shù):
System Message: WARNING/2 (<string>, line 99); backlink Inline literal start-string without end-string. from django.conf.urls.defaults import * urlpatterns = patterns(**'mysite.views'** , (r'^hello/$', **'hello'** ), (r'^time/$', **'current_datetime'** ), (r'^time/plus/(d{1,2})/$', **'hours_ahead'** ), )
注意既不要在前綴后面跟著一個(gè)點(diǎn)號(hào)("." ),也不要在視圖字符串前面放一個(gè)點(diǎn)號(hào)。 Django 會(huì)自動(dòng)處理它們。
牢記這兩種方法,哪種更好一些呢? 這取決于你的個(gè)人編碼習(xí)慣和需要。
字符串方法的好處如下:
更緊湊,因?yàn)椴恍枰銓?dǎo)入視圖函數(shù)。
如果你的視圖函數(shù)存在于幾個(gè)不同的 Python 模塊的話,它可以使得 URLconf 更易讀和管理。
函數(shù)對象方法的好處如下:
更容易對視圖函數(shù)進(jìn)行包裝(wrap)。 參見本章后面的《包裝視圖函數(shù)》一節(jié)。
更 Pythonic,就是說,更符合 Python 的傳統(tǒng),如把函數(shù)當(dāng)成對象傳遞。
兩個(gè)方法都是有效的,甚至你可以在同一個(gè) URLconf 中混用它們。 決定權(quán)在你。
- django 中的聚合函數(shù),分組函數(shù),F(xiàn) 查詢,Q查詢
- Django中利用filter與simple_tag為前端自定義函數(shù)的實(shí)現(xiàn)方法
- Django中傳遞參數(shù)到URLconf的視圖函數(shù)中的方法
- 利用Django框架中select_related和prefetch_related函數(shù)對數(shù)據(jù)庫查詢優(yōu)化
- 用實(shí)例詳解Python中的Django框架中prefetch_related()函數(shù)對數(shù)據(jù)庫查詢的優(yōu)化
- Django中F函數(shù)的使用示例代碼詳解
相關(guān)文章
在NumPy中創(chuàng)建空數(shù)組/矩陣的方法
今天小編就為大家分享一篇在NumPy中創(chuàng)建空數(shù)組/矩陣的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06Scrapy+Selenium自動(dòng)獲取cookie爬取網(wǎng)易云音樂個(gè)人喜愛歌單
這篇文章主要介紹了Scrapy+Selenium自動(dòng)獲取cookie爬取網(wǎng)易云音樂個(gè)人喜愛歌單,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02Python實(shí)現(xiàn)雙向RNN與堆疊的雙向RNN的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Python語言實(shí)現(xiàn)雙向RNN與堆疊的雙向RNN,文中詳細(xì)講解了雙向RNN與堆疊的雙向RNN的原理及實(shí)現(xiàn),需要的可以參考一下2022-07-07python3報(bào)錯(cuò)check_hostname?requires?server_hostname的解決
這篇文章主要介紹了python3報(bào)錯(cuò)check_hostname?requires?server_hostname的解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12python程序主動(dòng)退出進(jìn)程的五種方式
對于如何結(jié)束一個(gè)Python程序或者用Python操作去結(jié)束一個(gè)進(jìn)程等,Python本身給出了好幾種方法,而這些方式也存在著一些區(qū)別,對相關(guān)的幾種方法看了并實(shí)踐了下,同時(shí)也記錄下,需要的朋友可以參考下2024-02-02Python中為feedparser設(shè)置超時(shí)時(shí)間避免堵塞
為feedparser設(shè)置一個(gè)超時(shí)時(shí)間,可是feedparser并沒有提供這個(gè)功能,只好采用其他方法了,感興趣的朋友可以看看2014-09-09