捕獲的參數如何和include()協同工作
一個被包含的URLconf接收任何來自parent URLconfs的被捕獲的參數,比如:
# root urls.pyfrom django.conf.urls.defaults import *urlpatterns = patterns('', (r'^(?P<username>/w+)/blog/', include('foo.urls.blog')),)# foo/urls/blog.pyfrom django.conf.urls.defaults import *urlpatterns = patterns('', (r'^$', 'foo.views.blog_index'), (r'^archive/$', 'foo.views.blog_archive'),)在這個例子中,被捕獲的 username 變量將傳遞給被包含的 URLconf,進而傳遞給那個URLconf中的 每一個 視圖函數。
注意,這個被捕獲的參數 總是 傳遞到被包含的URLconf中的 每一 行,不管那些行對應的視圖是否需要這些參數。 因此,這個技術只有在你確實需要那個被傳遞的參數的時候才顯得有用。
額外的URLconf如何和include()協同工作
相似的,你可以傳遞額外的URLconf選項到 include() , 就像你可以通過字典傳遞額外的URLconf選項到普通的視圖。 當你這樣做的時候,被包含URLconf的 每一 行都會收到那些額外的參數。
比如,下面的兩個URLconf在功能上是相等的。
第一個:
# urls.pyfrom django.conf.urls.defaults import *urlpatterns = patterns('', (r'^blog/', include('inner'), {'blogid': 3}),)# inner.pyfrom django.conf.urls.defaults import *urlpatterns = patterns('', (r'^archive/$', 'mysite.views.archive'), (r'^about/$', 'mysite.views.about'), (r'^rss/$', 'mysite.views.rss'),)第二個
# urls.pyfrom django.conf.urls.defaults import *urlpatterns = patterns('', (r'^blog/', include('inner')),)# inner.pyfrom django.conf.urls.defaults import *urlpatterns = patterns('', (r'^archive/$', 'mysite.views.archive', {'blogid': 3}), (r'^about/$', 'mysite.views.about', {'blogid': 3}), (r'^rss/$', 'mysite.views.rss', {'blogid': 3}),)這個例子和前面關于被捕獲的參數一樣(在上一節就解釋過這一點),額外的選項將 總是 被傳遞到被包含的URLconf中的 每一 行,不管那一行對應的視圖是否確實作為有效參數接收這些選項,因此,這個技術只有在你確實需要那個被傳遞的額外參數的時候才顯得有用。 因為這個原因,這種技術僅當你確信在涉及到的接受到額外你給出的選項的每個URLconf時有用的才奏效。
新聞熱點
疑難解答
圖片精選