一、path函数
-
导入:
from django.urls import path
-
语法:
path(route,views,name=Node)
-
参数:
- route:字符串类型,匹配的请求路径
- views:指定路径所对应的视图处理函数的名称
- name:为地址起别名,在模板中地址反向解析时使用
-
练习:建立一个小网站
- 输入网址:http://127.0.0.1:8000,在网页中输出:这是我的首页
- 输入网址:http://127.0.0.1:8000/page/1,在网页中输出:这是编号为1的网页
- 输入网址:http://127.0.0.1:8000/page/2,在网页中输出:这是编号为2的网页
代码:
-
思考:建立上百个网页该怎么办?
例如:http://127.0.0.1:8000/page/3
http://127.0.0.1:8000/page/4
···
http://127.0.0.1:8000/page/100
二、path转换器
针对上面的问题,可以使用path转换器
-
解决:
path转换器
- 语法:<转换器类型:自定义名>
- 作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
- 例子:
path('page/\<int:page>',views.xxx)
-
path转换器类型
转换器类型 作用 样例 str 匹配除了’/'之外的非空字符串 "v1/user/<str:username>"
:匹配va/users/guoxiaonao
int 匹配0或者任意正整数。返回一个int "page/<int:page>"
:匹配/page/100
slug 匹配任意由ASCII字母或数字以及连字符和下划线组成的短标签 "detail/<slug:sl>"
:匹配/detail/this-is-django
path 匹配非空字段,包括路径分隔符’/’ "v1/user/<path:ph>"
:匹配v1/goods/a/b/c
-
测试:
-
练习:小计算器
定义一个路由的格式为:
http://127.0.0.1:8000/整数/操作字符串[add/sub/mul]/整数
-
从路由中提取数据,做相应的操作后返回给浏览器
-
效果如下:
输入:
http://127.0.0.1:8000/100/add/200
页面显示结果:300
-
代码:
-
结果:
-
三、re_path()函数
-
在url的匹配过程中,可以使用正则表达式进行准确匹配
-
语法:
- re_path(req, view, name=xxx)
- 正则表达式为命名分组模式
(?P<name>pattern)
;匹配提取参数后用关键字传参方式传递给视图函数
-
样例:
# 可匹配: http://127.0.0.1:8000/20/mul/40
# 不可匹配: http://127.0.0.1:8000/200/mul/400
urlpatterns=[ path('admin/',admin.site.urls), re_path(r'^(?P<x>\d{1,2})/(?P<op>\w+)/(?P<y>\d{1,2})$',views.cal_view), ]
-
代码:
-
结果:
-
练习:
访问地址:
http://127.0.0.1:8000/birthday/四位数字/一到两位数字/一到两位数字
http://127.0.0.1:8000/birthday/一到两位数字/一到两位数字/四位数字
最终输出:
生日为:xxxx年xx月xx日
效果样例:
http://127.0.0.1:8000/birthday/2015/12/11
显示为:生日为:2015年12月11日
http://127.0.0.1:8000/birthday/2/28/2008
显示为:生日为:2008年2月28日
代码: