當一個請求到達正則表達式
首先到項目根目錄下的urls.py查找路由規則django
按順序匹配urlapp
一旦匹配,django導入並調用給定的視圖post
若是沒有匹配到或者出錯,返回404ui
path(route,view,kwargs=None,name=None)url
route:字符串url規則spa
view:視圖code
kwargs:額外參數,傳遞給view,必須是一個字典blog
name:url的命名 通常配合須要返回到一個視圖所對應的url時用到ci
url捕獲參數
1.在視圖中定義detail方法,並定義pk參數
def detail(request,pk): return HttpResponse("捕獲的參數爲 %s" % pk)
2.在urls.py中配置須要捕獲參數的url
urlpatterns = [ #使用<>指定須要獲取參數名 # 與方法中的參數名一致 path('detali/<pk>/',views.detail()) ]
3.訪問url:http://127.0.0.1:8000/detali/45/
頁面顯示:捕獲的參數爲 45
路徑轉換器
經常使用的類型轉換器
str:匹配除 / 以外的全部字符串
int:匹配任意整數
slug:匹配任意ascii字符,加上連字符和下劃線
uuid:格式id
path:匹配任意非空字符
urlpatterns = [ #將傳遞的參數轉換爲int類型 #如何傳遞的參數不能轉換爲int類型就會報錯
path('detali/<int:pk>/',views.detail) ]
正則表達式re_path
1在視圖中定義students方法,並調用年、月參數
def students(request,year,month): return HttpResponse("%s年%s月" %(year,month))
2.使用re_path定義url路徑
urlpatterns = [ #使用正則表達式對傳遞的參數進行過濾 re_path(r'students/(?P<year>\d{4})/(?P<month>[0-9]|1[0-2])/', views.students) ]
Django搜索url
1.只搜索路徑部分,跟參數,以及請求方法(get、post)無關
2.同一個url能夠匹配get、post
傳遞額外參數
1.在視圖中定義方法
def detail(request,pk,status): return HttpResponse("捕獲的參數爲 %s" % pk)
2.配置url
urlpatterns = [ #kwargs必須是字典 #kwargs中的status在detail方法中存在 #若是傳遞的參數名和kwargs中的鍵一致,以kwargs爲準 path('detail/<int:pk>/',views.detail,kwargs={"status":True}) ]
include
1.include,一個urls.py中引用另外一個urls.py
from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), #項目目錄中的urls.py引用teacher中的urls.py path('teacher/',include('teacher.urls')) ]
url命名
1.在urls.py定義app_name
2.指定url name
from django.urls import path,re_path from . import views app_name = "teacher" urlpatterns = [ path('index/',views.index), path('login/',views.login,name="login"), ]
3.從index重定向到login
from django.shortcuts import reverse,redirect from django.http import HttpResponse def index(request): url = reverse("teacher:login") #appname:urlname return redirect(url) def login(request): return HttpResponse("登陸頁面")