Django之路由系统
Django之路由系统
-
前言: URL配置(URLconf)就像Django所支撑网站的目录,它的本质是URL与要为该URL调用的视图函数之间的映射表
-
URLconf中配置
-
基本格式(django1.x版本)
-
from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ]
-
Django2.0版本格式
-
from django.urls import path urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive), path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail), ]
-
-
-
参数说明
-
Django路由系统匹配URL路径的时候是从上到小按照注册顺序来的
-
django的路由系统只匹配URL路径,不匹配域名,端口和URL参数
-
分组匹配----》相当于给视图函数传位置参数
-
分组命名匹配 ----》相当于给视图函数传关键字参数
(?P<name>pattern)
其中name为组的名称,pattern为匹配的模式
- 注意:分组匹配和分组命名匹配不能混合使用
-
-
实例:为获取某出版社某年某月出版的书的数量,
-
# urls.py中 from app01 import views urlpatterns = [ # url(r"^book_amount/([0-9]{4})/([0-9]{2})/$", views.book_list), # 分组匹配 url(r"^book_amount/(?P<year>[0-9]{4})/{?P<month>[0-9]{2}/$", views.book_list) # 分组命名匹配 ]
-
# views.py中 def book_list(request,year,month): print(year,month) #对于匹配的值可以打印,类型为字符串类型
-
对于使用分组命名匹配,在views.py中可以使用默认参数
-
def page(request, num="1"): pass
-
-
给URL匹配模式器名字
- name = "别名" ---》 起别名的目的是为了反向解析URL的时候有依据
- 起别名的作用是:动态匹配跳转的页面,直接通过名字name可以找到,
- name = "别名" ---》 起别名的目的是为了反向解析URL的时候有依据
-
通过名字反向解析
-
namespace模式
-
当项目很大,页面很多的时候,项目下urls.py中就会出现混乱,复杂,所以要用namespace模式,来进行分块匹配
-
from django.conf.urls import url, include from teacherapp import urls as teacherurls urlpatterns = [ url(r"^teacher/", include(teacherurls, namespace="teacher")), # 二级目录 ]
-
-