03 Django URL路由系統

2022-06-27 06:18:07 字數 3168 閱讀 1314

目錄正規表示式

include--url分發

命名url(別名)和url的反向解析

命名空間模式

​ url配置(urlconf)就像django 所支撐**的目錄。它的本質是url與要為該url呼叫的檢視函式之間的對映表。你就是以這種方式告訴django,對於這個url呼叫這段**,對於那個url呼叫那段**。

from django.conf.urls import url

#迴圈urlpatterns,找到對應的函式執行,匹配上乙個路徑就找到對應的函式執行,就不再往下迴圈了,並給函式傳乙個引數request,和wsgiref的environ類似,就是請求資訊的所有內容

urlpatterns = [

url(正規表示式, views檢視函式,引數,別名),

]

無名與有名分組。

分組命名正規表示式組的語法是(?ppattern),其中name是組的名稱,pattern是要匹配的模式。

from django.conf.urls import url

from django.contrib import admin

urlpatterns = [url(r'^admin/', admin.site.urls),

url(r'^home/', views.home),

#路徑分發 不區別請求方法

url(r'^login/', views.login),

# 無名分組引數articles會攜帶兩個分組的位置引數,一一對應

# url(r'^articles/(\d+)/(\d+)/', views.articles),

# 有名分組引數articles會攜帶兩個分組的關鍵字引數

url(r'^articles/(?p\d+)/(?p\d+)/', views.articles),]

在檢視函式中可以指定預設值。

# return httpresponse('hahaha') # 返回字串

return render(request,'home.html') # 返回html檔案

def login(request):

if request.method == 'post':

print(request.post)

# name = request.post.get('username')

pwd = request.post.get('pwd')

if name == 'yan' and pwd == '123':

return httpresponse('登入成功!')

else:

return httpresponse('登入失敗!')

else:

return render(request, 'login.html')

# 無名匹配分組執行的函式,是位置引數

# def articles(request,year,month):

# print(year,month) # 獲取到year="2019" month="9"

# return httpresponse(year+'年'+month+'月所有文章!')

# 有名匹配分組執行的函式,是關鍵字引數

def articles(request,m,y):

print(y, m) # 獲取到y="2019" m="9"

return httpresponse(y + '年' + m +'月所有文章!')urlpatterns中的元素按照書寫順序從上往下逐一匹配正規表示式,一旦匹配成功則不再繼續。

若要從url中捕獲乙個值,只需要在它周圍放置一對圓括號(分組匹配)。

不需要新增乙個前導的反斜槓(也就是寫在正則最前面的那個/),因為每個url 都有。例如,應該是^articles 而不是 ^/articles。

每個正規表示式前面的'r' 是可選的但是建議加上。

^articles& 以什麼結尾,以什麼開頭,嚴格限制路徑。

捕獲的引數永遠都是字串:

每個在urlconf中捕獲的引數都作為乙個普通的python字串傳遞給檢視,無論正規表示式使用的是什麼匹配方式。(數字也是字串型別)

login.html 檔案

在專案目錄下的ulrs.py檔案引入include,完成以下配置

from django.conf.urls import url,include

from django.contrib import admin

urlpatterns = [

url(r'^$', views.base) # 首頁 不加任何路徑,只有 127.0.0.1:8000

]

在urls.py檔案中:

url(r'^路徑/', views.函式名, name='別名'), 

例如: url(r'^home2', views.home, name='home'),

在html檔案模板中:

多用於a、form表單。

例如: # /home2/

views.py

可用於重定向

from django.urls import reverse

reverse('別名') # 反向解析

例如: reverse("home") # /home2/

def my_url(request):

return redirect('別名') # 直接寫別名,不用reverse

如果在include路由分發的時候使用別名,會在reverse時發生路徑的錯誤。因此需要進行命名空間模式的設定。

# 反向解析

html檔案中:

django url 路由設定技巧

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

django url路由引數錯誤

出現錯誤 typeerror get got an unexpected keyword argument teacher id 出錯原因 view類中,get方法獲得了乙個多餘的額引數,這個引數是通過url正規表示式模版取出的資料,url傳遞過來的引數 如何解決?get方法中再次增加乙個引數去接收...

Vue路由(vue router)03(子路由)

對於單頁面的vue應用,子路由的配置可能是必不可少的,其實vue的子路由配置很簡單。這篇文章是基於上一片文章 路由配置02 的。示例需求,早footer.vue模組中配置子路由 示例檔案footer01.vue和footer02.vue 1.在components資料夾下新建乙個children資料...