python學習筆記-Day20 -第一部分

django url 參數詳解


通常我們建立一個django項目後, 其中重要的一步就是配置url, 一直原來對url瞭解的不是太多.今天詳細研究一下.

from django.conf.urls import include, url
from django.contrib import admin
from web import views
urlpatterns = [
    # Examples:
    # url(r'^$', 's11bbs.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^admin/', include(admin.site.urls)),
]

上面是我建立項目之後,默認的url配置

url(regex, view, kwargs=None, name=None, prefix=''):
.......

這是url的源碼


在URL請求達到django的路由系統的時候,也就是 url , 首先會匹配對應的regex, 如果匹配到了,就會執行 對應該條 regex 的views函數 .


regex 

代表一個正則表達式, 如果 請求的URL 爲 http://www.timesnotes.com/ 那麼對應的url 爲 

url(r'^$', views.index,name="index"),

在這裏我們還可以向後面的函數傳遞參數,   前面的文章有寫 ,這裏也會在簡單的介紹一下.



view

url 正則匹配成功後, 就會執行相應的視圖函數,django 使用用HttpResponse 對象作爲第一個參數傳遞給views,  當 reges 參數中 帶有參數時, 可以將其作爲可選參數傳遞給views,

例:

url(r'^/index/(\d+)$', views.index,name="index"),

那麼 括號裏的 (\d+)  將會被作爲地格紋參數傳遞給 view.index 函數,即 index(request, val) # val 對應(\d+)

注意:

如果我在傳遞參數的時候,給參數指定了名稱,那麼url 和views函數中的參數名稱就必須保持一致.

url(r'^(?P<my_id>\d+)/$', views.get_id, name='GetID'),

此時,括號裏對應的 (?P<my_id>\d+) 將作爲第二個參數傳遞給 views.get_id函數,

即   get_id(request,my_id)  這裏的參數名稱 必須前後一致.




name

在我們設置urlconf的時候,  我們可能會遇到這種情況, 即 多條url conf 使用 同一視圖函數. 這樣在使用templates 系統的時候, 如果我們使用硬編碼的方式 寫代碼, 模板將變得難以維護,

例1  在rulconf 使用如下配置的時候

url(r'^/index/$', views.index,name="index"),

 {% url views.index %} 中 的views.index 將返回 對應的 regex  “/index/"

例2

url(r'^/index/(\d+)$', views.index,name="index"),
url(r'^/index-add/(\d+)$', views.index,name="indexAdd"),

 此時 {% url views.index %} 想使用views函數名來返回url 的時候,就會遇到問題。

這個時候 name 參數的作用就體現出來了。 name 可以 用來 區別多個url 對應多個views函數的情況。 通過name 來反向獲取URL。

我們可以使用如下的方式 獲取對應的url

{% url index 1990 %} 

{% url indexAdd 2000 %} 





kwargs 

是一個子典型的參數,使用方式如下:


url(r'^/index-add/(\d+)$', views.index,{"memo":True},name="indexAdd"),


這裏的kwargs 就是{”memo":True}


在對應的視圖函數中 的使用方式爲:

def index(request,val,memo):......


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章