Django设置路由分发规则2

(四)路由的定义规则
(1)每个urls.py文件的路由地址必须在列表urlpatterns里定义,换句话说,每个urls.py必须设有一个列表urlpatterns,该列表是用于定义路由信息。

(2)每条路由是由函数path定义,函数path设置了3个参数:第一个参数是设置具体的路由地址;第二个参数是指向项目应用的views.py的某个视图函数或视图类,负责处理路由的业务逻辑;第三个参数为name='XXX’,这是函数path的可选参数,该参数是命名路由地址。

(3)如果函数path第二个参数使用内置函数include,该路由是实现路由分发功能。也就是说,如果函数path的第二个参数是函数include,该路由为路由分发;如果函数path的第二个参数是项目应用的views.py的视图类或视图函数,该路由为网站的路由地址。

(4)函数path是Django 2.0以上版本定义的内置函数,如果开发环境是Django 1.X版本,那么路由定义应使用函数url。从参数的角度分析,函数path和函数url的参数设置是相同的只不过函数url定义的路由地址需设置路由符号^和s。^代表当前路由地址的相对路径;s代表当前路由地址的终止符。1.x和2.x版本逐渐淘汰,定义省略。

(五)路由变量与正则表达式
1、路由变量类型
路由detail在路由地址里设置了路由变量id,通过动态改变路由变量id的数值就能生成相应的商品详细介绍页面,Django的路由变量分为字符类型、整型、slug和uuid,最为常用的是字符类型和整型。各个类型说明如下:

字符类型:匹配任何非空字符串,但不含斜杠。如果没有指定类型,就默认使用该类型。
整型:匹配0和正整数。
slug:可理解为注释、后缀或附属等概念,常作为路由的解释性字符。可匹配任何ASCII字符以及连接符和下划线,能使路由更加清晰易懂。比如网页的标题是“13岁的孩子” ,其路由地址可以设置为“13-sui-de-hai-zi”
uuid: 匹配一个uuid格式的对象。为了防止冲突,规定必须使用"-”并且所有字母必须小写,例如075194d3-6885-417e-a8a8-6c931e272100.
2、路由变量定义
在路由中,如果使用函数path定义路由,那么路由变量则使用变量符号“<>”定义。在括号里面以冒号划分为两部分,冒号前面代表的是变量的数据类型,冒号后面代表的是变量名,变量名可自行命名,如果没有设置变量的数据类型,就默认为字符类型。比如路由变量<year>、<int:month>和<slug:day>,变量说明如下:

<year> :变量名为 year,数据格式为字符类型,与<str:year>的含义一样。
<int:month>:变量名为 month,数据格式为整型。
<slug:day>:变量名为 day,数据格式为 slug。
3、路由的可选变量
除了在路由地址设置变量外, Django还支持在路由地址外设置变量(路由的可选变量),比如在路由detail的路由中添加可选变量user,如下所示:


# 项目应用 commodity 的 urls.py
from django.urls import path 
from .views import * 
urlpatterns = [
     path('.html', commodityView, {'user': 'admin'}, name='commodity'), 
    path('/detail.<int:id>.html', detailView, name='detail'), 
]
 

在这里插入图片描述

 

从上述代码可以看出,可选变量user的设置规则如下:

可选变量只能以字典的形式表示。
设置的可选变量只能在视图函数中读取和使用。
字典的一个键值对代表一个可选变量,键值对的键代表变量名,键值对的值代表变量值。
变量值没有数据格式限制,可以为某个实例对象、字符串或列表(元组)等。
可选变量必须在视图函数(视图类)和参数 name 之间。
不管我们在路由地址中添加路由变量或者添加可选变量,只要路由信息里设置了变量, 都必须在对应的视图函数里设置对应的函数参数,并且函数参数必须与路由信息的变量名一一对应。
任务1:如何在视图函数里访问可选路由变量?在控制台输出路由变量值

在这里插入图片描述

 任务2:如何在视图函数里访问可选路由变量?在模板页面输出路由变量值在这里插入图片描述

4、使用正则表达式给路由变量设定范围
虽然路由变量可以使用字符类型、整型、slug 和 uuid 表示,但某些路由变量会因为业务需求或实际情况而设置一定的范围值,比如变量,该变量代表年份,年份都是由4位数字组成,而整型的数值可以长达10位。为了进一步规范路由变量的数据格式,可以使用正则表达式限制路由变量的取值范围,示例如下:
 

# 某项目应用的 urls.py 
from django.urls import re_path 
from . import views 
urlpatterns = [
    re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html', views.mydate)
 ] 
 

路由的正则表达式是由路由函数 re_path 定义的,其作用是对路由变量进行截取与判断,正则表达式是以小括号为单位的,每个小括号的前后可以使用斜杠或者其他字符将其分隔与结束。

以上述代码为例,分别将变量 year、month 和 day 以斜杠隔开,每个变量以一个小括号为单位,在小括号内,可分为3部分,以(?P<year>[0-9]{4})为例。

?P 是固定格式,字母 P 必须为大写。
<year> 为变量名。
[0-9]{4} 是正则表达式的匹配模式,代表变量的长度为 4,只允许取 0~9 的值。
 

任务:针对首页index.html,路径包含年月日,如果正确,就显示在页面上

在这里插入图片描述

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Django中,include函数可以用于将某个url模式文件的路径包含到主url模式文件中,实现路由分发和管理。通过include函数,可以将不同部分的路由分别配置在不同的文件中,使得整个项目结构更加清晰和易于维护。在主url模式文件中,只需引入包含其他路由的文件路径即可。例如:url(r'^users/', include('users.urls')),就将指向"/users/"路径请求的路由指向了内部的users.urls文件。 ### 回答2: Django路由分发是指将网站请求分发给不同的视图函数或者应用程序。在Django中,路由分发可以使用include()函数实现。 include()函数允许将URL模式从其他模块导入到主URLConf中。这样,就可以把路由分发到其他应用程序或模块中去处理。在导入其他模块时,需要使用模块名和应用程序名称来指定路由。 当使用include()函数时,URLConf必须返回一个实例化的URLConf,而不能是一个URL模式。这个实例化的URLConf对象也可以是一个字符串列表,包含其他应用程序中的URL模式名称。 使用include()函数时,需要按照一定的模式来指定URLConf对象的路径。一个通用的格式是:`include(pattern_list, namespace=None)`,其中pattern_list是一个URLConf模块或者URL模式列表,namespace是一个可选的命名空间参数。 在使用include()函数时,需要考虑一些细节问题。首先,应该使用`r''`来表示正则表达式模式,这样可以确保正确的字符转义。其次,在使用namespace命名空间时,应该使用别名来避免重复。最后,在定义URLConf对象时,应该注意匹配所有可能的URL路径,以便覆盖所有的路由请求。 总之,Django路由分发(include)是一个非常灵活和方便的功能,可以帮助我们快速地将网站请求分发给不同的应用程序和模块,从而实现完整的网站架构。 ### 回答3: Django框架是一个基于MTV模式的Web应用程序开发框架,为开发人员提供了诸多便利。其中,路由分发Django框架中重要的一环,负责将请求分配到相应的视图函数中。而include函数在路由分发中发挥着重要作用。 include函数实际上是一种路由分发方式,其作用是将一个应用程序中的URL映射添加到一个项目中。在Django应用程序中,一般情况下需要将所有的URL映射添加到一个名为urls.py的文件中。在这个文件中,我们可以定义Django应用程序中的URL与其相应的视图函数之间的映射关系。 当应用程序中的URL数量增加后,为了更好的管理和维护,我们可以将URL映射按照不同的业务功能模块进行分组。这个时候,include函数就派上用场了。可以在项目中的urls.py文件中使用include函数,将某个应用程序中的urls.py文件引入到项目中。具体操作如下: 1. 在项目的urls.py文件中引入include函数,例如:`from django.urls import include, path` 2. 在项目的urls.py文件中配置一个URL模式,例如:`path('app/', include('myapp.urls'))` 3. 在应用程序中的urls.py文件中配置URL模式 使用include函数可以将URL模式按照不同的业务模块进行划分,减轻代码维护的复杂度。同时,在应用程序中使用include函数可以将应用程序抽象成一个独立的模块,方便进行重用和共享。include函数简化了URL配置的结构,提高了代码的可阅读性和可重用性。 总之,include函数是Django路由分发中非常实用的工具,可以帮助我们更好地组织和管理URL模式,提高开发效率和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值