Django的高階url配置

2021-06-12 10:00:54 字數 3591 閱讀 4112

關於django的url配置,有特別多的方法和方式,最簡單的理解就是

from django.conf.urls.defaults import *

from mysite.views import hello, current_datetime, hours_ahead

urlpatterns = patterns(」,

(r』^hello/$』, hello),

(r』^time/$』, current_datetime),

(r』^time/plus/(\d)/$』, hours_ahead),

如上面一段**,其實就是乙個列表,乙個列表左邊是瀏覽器的顯示方式,右邊就是所呼叫的方法,如r』^hello/$這個,^和$符號就是限定url的方式,說明只能以hello開始,以/結束,所以瀏覽器只能出現http://localhost/hello/這樣就會呼叫hello方法,這之前就是from mysite.views所匯入的方法。如果缺少/$,那麼,瀏覽器http://localhost/hello/fdsnaofdn後面是多少字元都是匹配hello方法的。

各種特色的url就是在位址和方法之間進行設定,這需要方法的配合使用,如

例子一:

# urls.py

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patterns(」,

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

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

#這裡在後面加入了,用來傳遞的引數,意思是如果瀏覽器是http://localhost/foo/的話,就傳遞template_name,並且值為template1.html。

# 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, )

#呼叫引數,值即從url中傳遞過來的值

例子二:

urlpatterns = patterns(」,

(r』^mydata/birthday/$』, views.my_view, ),

# 設定了某個url,http://localhost/mydata/birthday/,將其值設定為與http://localhost/mydata/jan/06一樣,適應於某些特殊場合。但缺點就是只能設定乙個值。

(r』^mydata/(?p\w)/(?p\d\d)/$』, views.my_view),

#動態獲取瀏覽器中的month和day的值,比如瀏覽器http://localhost/feb/21/就會傳遞給view以month=feb,day=21的值,這對歸檔呼叫資料非常有用。

def my_view(request, month, day):

#這就是呼叫的方法。

例子三:

說明:這個例子的目的就是在url中定義模板的名稱,因為events/和blog/entries/的內容和方法都一樣,不同的僅僅是模板,一般情況下要分別定義兩個模板,而這裡就讓它在url自動傳遞,這個例子中使用模型傳遞引數,而引數則存在於models的名稱中,濡models.event模型的__name__就是event,所以model.__name__.lower()就是小寫的event。

# 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()

#使用獲取的模型,這裡只用到了名字,即如果瀏覽器裡是http://localhost/events/則這個句子就是:template_name = 『mysite/event_list.html』。

return render_to_response(template_name, )

#接上上面的假如的畫這句就是:return render_to_response(『mysite/event_list.html』, )

例子四:

說明:這個例子要解決的就是,當瀏覽器中缺少值的時候,使用預設值,比如http://localhost/blog/和http://localhost/blog/3/,它們兩個呼叫的都是views.page方法,正常的是http://localhost/blog/3,有傳遞引數,表示在第3頁,而一般情況下為了簡潔經常將http://localhost/blog/表示為第一頁,即http://localhost/blog/1/所以就要在views.py中設定預設值,方法如下。

# urls.py

from django.conf.urls.defaults import *

from mysite import views

urlpatterns = patterns(」,

(r』^blog/$』, views.page),

(r』^blog/page(?p\d+)/$』, views.page),

# views.py

def page(request, num=』1′):

#這句是關鍵,如果沒有值則使用num=』1′。

例子五:

# root urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns(」,

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

#include乙個url檔案。

# foo/urls/blog.py

from django.conf.urls.defaults import *

urlpatterns = patterns(」,

(r』^$』, 『foo.views.blog_index』),

#被包含之後就是http://localhost/username/blog/ 呼叫foo.views.blog_index方法,下同

(r』^archive/$』, 『foo.views.blog_archive』),

Django中的 動態URL配置

讓我們建立第三個檢視來顯示當前時間和加上時間偏差量的時間,設計是這樣的 新手可能會考慮寫不同的檢視函式來處理每個時間偏差量,url配置看起來就象這樣 urlpatterns patterns time current datetime time plus 1 one hour ahead time ...

django安裝及url配置

建立專案 django admin startproject qingqing cd qingqing 啟動專案 python manage.py runserver 127.0.0.1 8001 cd qingqing django.contrib.admin django.contrib.aut...

Django配置url位址訪問不同的頁面

在專案中我們可以進行訪問admin這個 但是在很多情況下,我們會自定義頁面,如何自定義,操作如下 以上圖所示,在urls中配置我們的訪問路徑,path 正規表示式url位址 檢視中的方法名 views中配置 頁面訪問顯示 在view 中實現對應的檢視,要記住第乙個引數是request,第二永遠記得要...