小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Django:URL-patterns的高級(jí)使用方式與URL傳遞參數(shù)

 迎風(fēng)翱翔 2014-01-15
1、多個(gè)視圖函數(shù)在patterns中的簡(jiǎn)潔寫(xiě)法:每一個(gè)視圖對(duì)應(yīng)一個(gè)patterns,在patterns中指定視圖所在的位置

from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('dapp1.views', #第一個(gè)參數(shù)指定視圖所在的位置
(r'^hello/$','hello'), #引用視圖中的hello函數(shù),注意這里需要使用單引號(hào)
(r'^world/$','world'),
(r'^$', 'home'),
)


urlpatterns += patterns('contact.views', #第二個(gè)視圖,urlpatterns是個(gè)元組,滿足可加性
(r'^contact/$','contact'),
)


2、傳遞額外參數(shù)到視圖函數(shù)中(額外參數(shù)也稱為關(guān)鍵字參數(shù))
# urls.py
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^foo/$', views.foobar_view, {'template_name': 'template1.html'}), #不同路徑對(duì)應(yīng)同一個(gè)視圖
(r'^bar/$', views.foobar_view, {'template_name': 'template2.html'}), #但展現(xiàn)的模板不同
)

# views.py
from django.shortcuts import render_to_response
from mysite.models import MyModel
def foobar_view(request, template_name): # 捕獲第二個(gè)參數(shù)
   m_list = MyModel.objects.filter(is_new=True)
return render_to_response(template_name, {'m_list': m_list})
3、在url路徑中給傳遞參數(shù)命名,在對(duì)應(yīng)的視圖函數(shù)中根據(jù)命名參數(shù)獲取他的值(傳遞參數(shù)也稱為位置參數(shù))
/mydata/jan/01/
/mydata/jan/02/
/mydata/jan/03/
# ...
/mydata/dec/30/
/mydata/dec/31/
urls.py
urlpatterns = patterns('',
(r'^mydata/(?P<month>\w{3})/(?P<day>\d\d)/$', views.my_view), #在正則表達(dá)式前加上?<name>命名參數(shù)

(?<name>exp)匹配exp,并捕獲文本到名稱為name的組里,也可以寫(xiě)成(?'name'exp)

)
views.py
def my_view(request, month, day):
# ....

另外,根據(jù)url的提示,給定參數(shù)值,作為額外參數(shù)進(jìn)行傳遞額
urlpatterns = patterns('',
(r'^mydata/birthday/$', views.my_view, {'month': 'jan', 'day': '06'}),#
(r'^mydata/(?P<month>\w{3})/(?P<day>\d\d)/$', views.my_view),
)
views.py
def my_view(request, month, day):
# ....
如果URLconf捕捉到的一個(gè)命名組變量和一個(gè)額外URLconf參數(shù)包含的變量同名時(shí),額外URLconf參數(shù)的值會(huì)被使用。
urlpatterns = patterns('',
(r'^mydata/(?P<id>\d+)/$', views.my_view, {'id': 3}),
)
4、當(dāng)頁(yè)面需要傳遞參數(shù)但實(shí)際上沒(méi)有參數(shù)傳遞時(shí),可以使用缺省視圖的情況
# urls.py

from django.conf.urls.defaults import *
from mysite import views

urlpatterns = patterns('',
(r'^blog/$', views.page), #URLconf中把特殊情況放在首位的處理
(r'^blog/page(?P<num>\d+)/$', views.page),
)

# views.py

def page(request, num='1'):
# Output the appropriate page of blog entries, according to num.
# ...

在這里,兩個(gè)URL表達(dá)式都指向了同一個(gè)視圖 views.page ,但是第一個(gè)表達(dá)式?jīng)]有傳遞任何參數(shù)。 如果匹配到了第一個(gè)樣式, page() 函數(shù)將會(huì)對(duì)參數(shù) num 使用默認(rèn)值 "1" ,如果第二個(gè)表達(dá)式匹配成功, page() 函數(shù)將使用正則表達(dá)式傳遞過(guò)來(lái)的num的值。(注:我們已經(jīng)注意到設(shè)置默認(rèn)參數(shù)值是字符串 `` ‘1’`` ,不是整數(shù)`` 1`` 。為了保持一致,因?yàn)椴蹲浇o`` num`` 的值總是字符串。每個(gè)被捕獲的參數(shù)將被作為純Python字符串來(lái)發(fā)送。

5、包含其他urls

from django.conf.urls.defaults import *

urlpatterns = patterns('',
(r'^weblog/', include('mysite.blog.urls')), #注意這里不使用$來(lái)匹配結(jié)束,因?yàn)槁窂胶竺娴膮?shù)可能會(huì)被包含urls中的patterns匹配
(r'^photos/', include('mysite.photos.urls')),
(r'^about/$', 'mysite.views.about'),
)
一個(gè)被包含的URLconf接收任何來(lái)自parent URLconfs的被捕獲的參數(shù),被捕獲的 username 變量將傳遞給被包含的 URLconf,進(jìn)而傳遞給那個(gè)URLconf中的 每一個(gè) 視圖函數(shù)。
urlpatterns = patterns('',
(r'^(?P<username>\w+)/blog/', include('foo.urls.blog')),
)
另外,傳遞額外的URLconf選項(xiàng)到 include() , 就像你可以通過(guò)字典傳遞額外的URLconf選項(xiàng)到普通的視圖。 當(dāng)你這樣做的時(shí)候,被包含URLconf的 每一 行都會(huì)收到那些額外的參數(shù)。與捕獲參數(shù)時(shí)等價(jià)的
urlpatterns = patterns('',
(r'^blog/', include('inner'), {'blogid': 3}),
)
這種技術(shù)僅當(dāng)你確信在涉及到的接受到額外你給出的選項(xiàng)的每個(gè)URLconf時(shí)有用的才奏效。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多