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):......