Django之路由系统(urls.py)
URL配置又称URL分发器(URLconfig)就像Django所支持网站的目录。他的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表;以这种方式告诉Django,这个URL应该执行那个函数
1 urlpatterns = [ 2 path('正则表达式', views视图函数,参数,别名), 3 ]
参数说明:
- 一个正则表达式字符串
- 一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串
- 可选的要传递给视图函数的默认参数(字典形式)
- 一个可选的name参数
注意:在Django2.0之后 ,摒弃了1.x中的url,而改用path
在1.x中,使用url()即可实现正则匹配,但是在2.0中,是否使用正则需要使用不同的方式。
path()无法使用正则;re_path()可以使用正则。
1 ?: (2_0.W001) has a route that contains '(?P<', begins with a '^', or ends with a '$'Django 2.0 path error
小试牛刀:
使用正则匹配url执行对应的函数,urlspatterns中想捕获正则表达式匹配的结果用来出传递给views.py视图函数文件使用,需要用到分组匹配,或者使用第三个参数python字典进行传参。
无名分组:
位置参数:匹配出的结果按顺序依次传递给视图函数的形参(形参必须有序,匹配值按位置顺序进行传递)
正则中小括号为分组,有分组,那么这个分组得到的用户输入的内容,就会作为对应函数的位置参数传进去,别忘了形参要写两个了
有名分组:
关键字参数:匹配出的结果按照命名对应传递给视图函数的形参(形参可以无序,匹配值按命名进行传递)
(?P
1 urltest.html: 2 3 4 "en"> 5 6 "UTF-8"> 7无名分组:re_path(r'^baidu/([0-9]{2})/$',views.NewDate),URLTest 8 9 10当前时间:{{ LocalTime }}
11 12 13 14 15 urls.py: 16 17 from django.urls import path,re_path 18 re_path(r'^baidu/([0-9]{2})/$',views.NewDate), 19 20 views.py: 21 22 def NewDate(req,a): 23 LocalTimes = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 24 return render(req,"urltest.html",{"LocalTime":LocalTimes})
1 group.html: 2 3 "en"> 4 5 "UTF-8"> 6有名分组:re_path(r'^time/(?Pgroup 7 8 9年:{{ Year }}
10月:{{ Mes }}
11 12 13 14 15 urls.py: 16 re_path(r'^time/(?P[0-9]{4})/(?P ',views.UrlGroup), 17 18 19 views.py: 20 def UrlGroup(req,year,mes): 21 return render(req,"group.html",{"Year":year,"Mes":mes})[0-9]{2})/$
别名:
django url中第四个参数--别名,别名引入使Django的url配置与前端页面对url的引用完全解耦
1 urls.py: 2 3 re_path(r'^Adair/',views.time,name="times") 4 5 6 views.py: 7 8 def time(req): 9 if req.method == "POST": 10 return HttpResponse("POST OK!") 11 return render(req,"Adair.html") 12 13 Adair.html: 14 15 16 "en"> 17 18 "UTF-8"> 1925 26 别名:re_path(r'^Adair/',views.time,name="times")TIME 20 21 22
映射:
在Django项目中,一个项目可能包含多个Django应用,而每个应用都有自己的独特的url映射规则,因此,将这些url映射保存在一个urls.py文件中是不利于网站的维护,因此Django提供了url映射的功能中
在创建Django项目时,Django本身自带的urls.py为主url文件,每个新创建的应用可以创建自己独立的urls.py文件,url映射就是用主url文件映射到相应的应用url文件上
1 re_path(r'^index/',include('APP.urls'))主URL
1 from django.contrib import admin 2 from django.urls import path,re_path,include 3 from django.conf.urls import url 4 from APP import views 5 6 urlpatterns = [ 7 re_path(r'time/(?P应用URL[0-9]{4}) ',views.date) 8 ]
1 def date(req,year): 2 return HttpResponse(year)视图