1静态路由匹配方式
urlpatterns属性:
- 首先找到
urls.py
下的urlpatterns
全局变量,这是一个路由规则实例的列表数据。 - 按照先后定义顺序,进行路由匹配。
- 找到第一个匹配项时停止匹配,执行匹配到的视图函数。
- 遍历完全,未发现匹配,
django
进行异常处理
注意(静态路由不考虑http请求方式)
1.path静态路由方法:
from django.urls import path(导包)
urlpatterns = [
path('admin/', admin.site.urls),
]
2.re_path方法:
from django.urls import re_path(导包)
urlpatterns = [
re_path(r'^[a-z]{3}$', views.ReView.as_view())
]
2.动态路由(重点)
1.动态路由传参与GET传参的异同:
- 动态路由传参,参数需要参与路由匹配,在路由匹配中获取参数(参与路由匹配)
- GET参数,参数部分不需要参与路由匹配,在视图中获取参数(不参与路由匹配)
2.动态路由转换器:
class Index(View):
def get(self,request,page,y):
return HttpResponse(f'当前为第{page}页{y}行')
urlpatterns = [
# 动态路由:
page和y与类视图要对应
path('index/<int:page>/<int:y>/', views.Index.as_view()),(常用)
path("<x>/<y>/",views.index), # 不指明类型(默认x,y是字符类型)
re_path(r"^(?P<x>\d+)/(?P<y>[a-zA-Z]+)/$"), # (?P<name>pattern) 正则分组
re_path(r"^(\d+)/([a-zA-Z]+)/$"),
]
3路由分发(重点)
1.意思就是在子应用下创建urls路由,然后主路由使用include实现分发效果:
子应用里的路由:
from django.urls import path,re_path
from myapp import views
urlpatterns = [
re_path(r'^[a-z]{3}/$', views.ReView.as_view()),
# 动态路由:
path('index/<int:page>/<int:y>/', views.Index.as_view()),
]
在主路由里面进行分发:
from django.urls import path,include(导入)
# 将子路由传递过来
from myapp import urls
urlpatterns = [
path('admin/', admin.site.urls),
# 路由分发:
引号里可以写,可以写
path('',include(urls))
]