当一个请求到达正则表达式
首先到项目根目录下的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("登陆页面")