在Django的URLconf中使用命名組的方法
在我們想要捕獲的URL部分上加上小括號(hào),Django 會(huì)將捕獲的文本作為位置參數(shù)傳遞給視圖函數(shù)。 在更高級(jí)的用法中,還可以使用 命名 正則表達(dá)式組來(lái)捕獲URL,并且將其作為關(guān)鍵字參數(shù)傳給視圖。
一個(gè) Python 函數(shù)可以使用關(guān)鍵字參數(shù)或位置參數(shù)來(lái)調(diào)用,在某些情況下,可以同時(shí)進(jìn)行使用。 在關(guān)鍵字參數(shù)調(diào)用中,你要指定參數(shù)的名字和傳入的值。 在位置參數(shù)調(diào)用中,你只需傳入?yún)?shù),不需要明確指明哪個(gè)參數(shù)與哪個(gè)值對(duì)應(yīng),它們的對(duì)應(yīng)關(guān)系隱含在參數(shù)的順序中。
例如,考慮這個(gè)簡(jiǎn)單的函數(shù):
def sell(item, price, quantity): print "Selling %s unit(s) of %s at %s" % (quantity, item, price)
為了使用位置參數(shù)來(lái)調(diào)用它,你要按照在函數(shù)定義中的順序來(lái)指定參數(shù)。
sell('Socks', '$2.50', 6)
為了使用關(guān)鍵字參數(shù)來(lái)調(diào)用它,你要指定參數(shù)名和值。 下面的語(yǔ)句是等價(jià)的:
sell(item='Socks', price='$2.50', quantity=6) sell(item='Socks', quantity=6, price='$2.50') sell(price='$2.50', item='Socks', quantity=6) sell(price='$2.50', quantity=6, item='Socks') sell(quantity=6, item='Socks', price='$2.50') sell(quantity=6, price='$2.50', item='Socks')
最后,你可以混合關(guān)鍵字和位置參數(shù),只要所有的位置參數(shù)列在關(guān)鍵字參數(shù)之前。 下面的語(yǔ)句與前面的例子是等價(jià):
sell('Socks', '$2.50', quantity=6) sell('Socks', price='$2.50', quantity=6) sell('Socks', quantity=6, price='$2.50')
在 Python 正則表達(dá)式中,命名的正則表達(dá)式組的語(yǔ)法是 (?P<name>pattern) ,這里 name 是組的名字,而 pattern 是匹配的某個(gè)模式。
下面是一個(gè)使用無(wú)名組的 URLconf 的例子:
from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', (r'^articles/(\d{4})/$', views.year_archive), (r'^articles/(\d{4})/(\d{2})/$', views.month_archive), )
下面是相同的 URLconf,使用命名組進(jìn)行了重寫:
from django.conf.urls.defaults import * from mysite import views urlpatterns = patterns('', (r'^articles/(?P<year>\d{4})/$', views.year_archive), (r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', views.month_archive), )
這段代碼和前面的功能完全一樣,只有一個(gè)細(xì)微的差別: 取的值是以關(guān)鍵字參數(shù)的方式而不是以位置參數(shù)的方式傳遞給視圖函數(shù)的。
例如,如果不帶命名組,請(qǐng)求 /articles/2006/03/ 將會(huì)等同于這樣的函數(shù)調(diào)用:
month_archive(request, '2006', '03')
而帶命名組,同樣的請(qǐng)求就會(huì)變成這樣的函數(shù)調(diào)用:
month_archive(request, year='2006', month='03')
使用命名組可以讓你的URLconfs更加清晰,減少搞混參數(shù)次序的潛在BUG,還可以讓你在函數(shù)定義中對(duì)參數(shù)重新排序。 接著上面這個(gè)例子,如果我們想修改URL把月份放到 年份的 前面 ,而不使用命名組的話,我們就不得不去修改視圖 month_archive 的參數(shù)次序。 如果我們使用命名組的話,修改URL里提取參數(shù)的次序?qū)σ晥D沒有影響。
當(dāng)然,命名組的代價(jià)就是失去了簡(jiǎn)潔性: 一些開發(fā)者覺得命名組的語(yǔ)法丑陋和顯得冗余。 命名組的另一個(gè)好處就是可讀性強(qiáng)。
相關(guān)文章
python使用magic模塊進(jìn)行文件類型識(shí)別方法
今天小編就為大家分享一篇python使用magic模塊進(jìn)行文件類型識(shí)別方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-12-12解決python的空格和tab混淆而報(bào)錯(cuò)的問題
這篇文章主要介紹了解決python的空格和tab混淆而報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2021-02-02Python利用filestools模塊實(shí)現(xiàn)水印添加
最近發(fā)現(xiàn)的這款filestools非標(biāo)準(zhǔn)庫(kù)其實(shí)真正實(shí)現(xiàn)添加水印的只要一個(gè)函數(shù)的調(diào)用,一行代碼即可完成水印的添加,感興趣的快跟隨小編一起學(xué)起來(lái)吧2022-09-09python中報(bào)錯(cuò)"json.decoder.JSONDecodeError: Expecting value:"的解決
這篇文章主要介紹了python中報(bào)錯(cuò)"json.decoder.JSONDecodeError: Expecting value:"的解決方法 ,需要的朋友可以參考下2019-04-04解決Python paramiko 模塊遠(yuǎn)程執(zhí)行ssh 命令 nohup 不生效的問題
這篇文章主要介紹了解決Python paramiko 模塊遠(yuǎn)程執(zhí)行ssh 命令 nohup 不生效的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07