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.pydef 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í)有用的才奏效。
|