1. 程式人生 > >Django:URL-patterns的高階使用方式與URL傳遞引數

Django:URL-patterns的高階使用方式與URL傳遞引數

# 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.
    # ...

在這裡,兩個URL表示式都指向了同一個檢視 views.page ,但是第一個表示式沒有傳遞任何引數。 如果匹配到了第一個樣式, page() 函式將會對引數 num 使用預設值 "1" ,如果第二個表示式匹配成功, page() 函式將使用正則表示式傳遞過來的num的值。(注:我們已經注意到設定預設引數值是字串 `` ‘1’`` ,不是整數`` 1`` 。為了保持一致,因為捕捉給`` num`` 的值總是字串。每個被捕獲的引數將被作為純Python字串來發送。

5、包含其他urls

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^weblog/', include('mysite.blog.urls')), #注意這裡不使用$來匹配結束,因為路徑後面的引數可能會被包含urls中的patterns匹配
    (r'^photos/', include('mysite.photos.urls')),
    (r'^about/$', 'mysite.views.about'),
)
一個被包含的URLconf接收任何來自parent URLconfs的被捕獲的引數,被捕獲的 username 變數將傳遞給被包含的 URLconf,進而傳遞給那個URLconf中的 每一個 檢視函式。
urlpatterns = patterns('',
    (r'^(?P<username>w+)/blog/', include('foo.urls.blog')),
)
另外,傳遞額外的URLconf選項到 include() , 就像你可以通過字典傳遞額外的URLconf選項到普通的檢視。 當你這樣做的時候,被包含URLconf的 每一 行都會收到那些額外的引數。與捕獲引數時等價的
urlpatterns = patterns('',
    (r'^blog/', include('inner'), {'blogid': 3}),
)
這種技術僅當你確信在涉及到的接受到額外你給出的選項的每個URLconf時有用的才奏效。