视图层 url路由设置

页面中使用URL

当我们在页面中需要使用路径的时候,不要硬编码路径,最好使用url标签。例如下面这样的。

<a href="{% url 'hello' '张三' %}">你好,张三</a>

这里url标签中指定的名称是urls.py文件中路径的name参数。

path('hello/<str:name>', views.hello, name='hello')

当项目中存在多个app的时候,需要使用命名空间来区分。做法很简单,在urls.py文件中添加app_name属性。

app_name = 'hello'
urlpatterns = [
    path('', views.index, name='index'),
    path('hello/', views.hello, name='hello')
    ]

然后在标签上添加用冒号分隔开的命名空间名称即可。

<a href="{% url 'hello:hello' '张三' %}">你好,张三</a>

路由系统

路由是关联 url 和处理该 url 函数的过程。Django 的路由都写在 urls.py 文件中的urlpatterns 列表中,由 path() 或 re_path() 作为元素组成。Django2.0版本中path(route, views.对应处理函数)等价于低版本的url(r’^route/$’, views.对应处理函数)。

Django的URL路由流程

Django查找全局urlpatterns变量(urls.py)

按照先后顺序,对URL逐一匹配(匹配 urlpatterns 的每个元素)

找到第一个匹配时停止查找,根据匹配结果执行对应的处理函数

如果没有找到匹配或出现异常,Django进行错误处理

tips:Django的路由不考虑HTTP请求方式,仅根据URL进行路由,即,只要URL相同,无论POST、GET等哪种请求方式都指向同一个操作函数。

路由格式

Urlpatterns 中的 path() 处理字符串路由,re_path() 处理正则表达式路由。正则表达式可以看做字符串的模式。
urlpatterns=[
# [] 表示可省略项
path(route,views.函数名,[向处理函数提供的额外参数(以字典形式表示)], 
 [该URL模式的别名)]),   
re_path(正则表达式,view.对应的处理函数),
]

Django支持三种方式表达route:

精确字符串格式
path('index/', views.index),
Django的转换格式
path('index/<类型:变量名>/', views.index),
e.g. path(index/<int:year>/), views.index),
使用该种格式,视图函数定义时要创建对应的参数来接收获取的值。
转换格式类型:
str,匹配除分隔符(/)外的非空字符,默认类型,即<year>等价于<str:year>;
int,匹配0和正整数;
slug,匹配字母、数字、横杠、下划线组成的字符串,str的子集;
uuid,匹配格式化的UUID,如075194d3-6885-417e-a8a8-6c931e272f00;
path,匹配任何非空字符串,包括路径分隔符,是全集。
如果传入的视图函数参数有多个,可以用到*args或者**kwargs,前者用索引,后者可以用for循环取出值。
正则表达式格式,用的是re_path
# 不提取参数,表示四位数字,每一个数字都是0到9的任意数字;
re_path('index/[0-9]{4}/', views.index) 
# 提取参数,将正则表达式提取的四位数字,每一个数字都是0到9的任意数字命名为year;
re_path('index/(?p<year>[0-9]{4})/', views.index)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值