A-2 django的url規則

當一個請求到達正則表達式

  首先到項目根目錄下的urls.py查找路由規則django

  按順序匹配urlapp

  一旦匹配,django導入並調用給定的視圖post

  若是沒有匹配到或者出錯,返回404ui

path(route,view,kwargs=None,name=None)url

  route:字符串url規則spa

  view:視圖code

  kwargs:額外參數,傳遞給view,必須是一個字典blog

  nameurl的命名 通常配合須要返回到一個視圖所對應的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.訪問urlhttp://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.只搜索路徑部分,跟參數,以及請求方法(getpost)無關

2.同一個url能夠匹配getpost

傳遞額外參數

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("登陸頁面")
相關文章
相關標籤/搜索