關於django url配置

2021-08-26 13:57:47 字數 2980 閱讀 1236

1:匹配/分組演算法

傳遞額外的引數到檢視函式中

urlpatterns = patterns('',

(r'^foo/$', views.foobar_view, ),

(r'^bar/$', views.foobar_view, ),

)# views.py

from django.shortcuts import render_to_response

from mysite.models import mymodel

def foobar_view(request, template_name):

m_list = mymodel.objects.filter(is_new=true)

return render_to_response(template_name, )

這裡直接把template_name作為額外引數傳到檢視

當url裡有額外引數跟捕捉值,django總是優先用url的額外引數

r'^mydata/birthday/$', views.my_view, ),

2:建立乙個通用檢視

# urls.py

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patterns('',

(r'^events/$', views.event_list),

(r'^blog/entries/$', views.entry_list),

)# views.py

from django.shortcuts import render_to_response

from mysite.models import event, blogentry

def event_list(request):

obj_list = event.objects.all()

return render_to_response('mysite/event_list.html', )

def entry_list(request):

obj_list = blogentry.objects.all()

return render_to_response('mysite/blogentry_list.html', )

這兩個檢視做的事情實質上是一樣的:顯示一系列的物件。讓我們把它們顯示的物件的型別抽象出來:

# urls.py

from django.conf.urls.defaults import *

from mysite import models, views

urlpatterns = patterns('',

(r'^events/$', views.object_list, ),

(r'^blog/entries/$', views.object_list, ),

)# views.py

from django.shortcuts import render_to_response

def object_list(request, model):

obj_list = model.objects.all()

template_name = 'mysite/%s_list.html' % model.__name__.lower()

return render_to_response(template_name, )

我們通過 model 引數直接傳遞了模型類

使用 model.__name__.lower() 來決定模板的名字

3:使用預設檢視引數

當傳遞的引數預設的時候在檢視的方法中可以用

def page(request, num="1"):

4:從url中捕獲文字

引數 是作為字串傳至 views的,而不是整型

5:決定urlconf搜尋的東西

當乙個請求進來時,django試著將請求的url作為乙個普通python字串進行urlconf模式匹配(而不是作為乙個unicode字串)。這並不包括 get 或 post 引數或網域名稱。它也不包括第乙個斜槓,因為每個url必定有乙個斜槓。

在解析urlconf時,請求方法(例如, post , get , head )並 不會 被考慮。換而言之,對於相同的url的所有請求方法將被導向到相同的函式中。因此根據請求方法來處理分支是檢視函式的責任。

所以www.sohu.com/view/ 跟www.sohu.com/view/?some=1 請求的是同乙個檢視

6:::包含其他urlconf

urlpatterns = patterns('',

(r'^weblog/', include('mysite.blog.urls')),

(r'^photos/', include('mysite.photos.urls')),

(r'^about/$', 'mysite.views.about'),

)注意::::指向 include() 的正規表示式並 不 包含乙個 $ (字串結尾匹配符)但是包含了乙個斜桿

每當django遇到 include() 時,它將截斷匹配的url,並把剩餘的字串發往包含的urlconf作進一步處理

一:捕獲的引數如何和include()協同工作

urlpatterns = patterns('',

(r'^(?p\w+)/blog/', include('foo.urls.blog')),

)乙個被包含的urlconf接收任何來自parent urlconfs的**獲的引數

**獲的username變數將傳遞給被包含的 urlconf,進而傳遞給那個urlconf中的 每乙個 檢視函式

二: 額外的urlconf如何和include()協同工作

相似的,你可以傳遞額外的urlconf選項到 include() , 就像你可以通過字典傳遞額外的urlconf選項到普通的檢視。當你這樣做的時候,被包含urlconf的 每一 行都會收到那些額外的引數

django url反向解析

引子 天冷,依舊是複習 html 首頁反向解析 反向解析 view def test request 反向解析 param request return 實際反向解析就是調取了 reverse from django.urls import reverse 實際上就會 到url 根據reverse ...

django url引數傳遞方式

這裡只記載一點小區別 1,引數傳遞的方式path abc views.abc,name abc 這種需要傳遞id給對應的檢視的 defabc request,id pass 在這個函式abc裡面,id是直接可以用的 不需要用get.get,或者post.get的方式獲取,直接用就可以了 在前台htm...

django url 路由設定技巧

django的url使用方法 利用django開發站點。能夠設計出很優美的url規則,假設url的匹配規則 包括正規表示式 組織得比較好,view的結構就會比較清晰。比較easy維護。最簡單的形式 from django.conf.urls import patterns,url urlpatter...