django2.0 路由规则
- Django2.0中URL的路由机制
- 路由是关联url及其处理函数关系的过程。Django的url路由配置在settings.py文件中ROOT_URLCONF变量指定全局路由文件名称。
- Django的路由都写在urls.py文件中的urlpatterns列表中,由path()或re_path()作为元素组成。
- Django的URL路由流程:
- 1 Django查找全局urlpatterns变量(urls.py)
- 2 按照先后顺序,对URL逐一匹配urlpatterns每个元素
- 3 找到第一个匹配时停止查找,根据匹配结果执行对应的处理函数。
- 4 如果没有找到匹配或出现异常,Django进行错误处理
- 注意:
- Django的路由不考虑HTTP请求方式,仅根据URL进行路由,即,只要URL相同,无论POST、GET等哪种请求方式都指向同一个操作函数。
- Urlpatterns中的path()处理字符串路由,re_path处理正则表达式路由。
- 其格式:
- urlpatterns=[
- path(route,views.函数名,向处理函数提供的额外参数,以字典形式表示,该URL模式的别名),
- re_path(正则表达式,view.对应的处理函数)
- ]
- 其中正则表达式可以看做字符串的模式。
- Django支持三种表达route:
- 1、 精确字符串格式:articles/2017/
- 一个精确URL匹配一个操作函数;最简单的形式,适合对静态URL的响应;URL字符串不以“/”开头,但要以“/”结尾
- 2、 Django的转换格式:<类型:变量名>,articles/<int:year>/
- 是一个URL模版,匹配URL同时在其中获得一批变量作为参数;是一种常用形式,目的是通过URL进行参数获取和传递

转换格式类型 |
说明 |
Str |
匹配除分隔符(/)外的非空字符,默认类型<year>等价于<str:year> |
Int |
匹配0和正整数 |
Slug |
匹配字母、数字、横杠、下划线组成的字符串,str的子集 |
Uuid |
匹配格式化的UUID,如075194d3-6885-417e-a8a8-6c931e272f00 |
path |
匹配任何非空字符串,包括路径分隔符,是全集 |

- 3、 正则表达式格式:articles/(?p<year>[0-9]{4})/
- 借助正则表达式丰富语法表达一类URL(而不是一个);可以通过<>提取变量作为处理函数的参数,高级用法;使用该方法时,前面不能使用path()函数,必须使用re_path()函数;表达的全部是str格式,不能是其他类型。
- 两种形式:不提取参数,比如re_path(articles/([0-9]{4}/,表示四位数字,每一个数字都是0到9的任意数字;提取参数,命名形式(?P<name>pattern),比如re_path(articles/(?P<year>[0-9]{4})/,将正则表达式提取的四位数字,每一个数字都是0到9的任意数字命名为year,
- 当视图函数路径较多时,可以使用Include()用法进行去重:
- 复制代码
- urlpatterns=[
- path(‘<page_slug>-<page_id>/history/’,views.history),
- path(‘<page_slug>-<page_id>/edit/’,views.edit),
- ]
- 复制代码
- 等价于:
- 复制代码
- Urlpatterns = [
- path(‘<page_slug>-<page_id>/’,include([
- path(‘history/’,views.history),
- path(‘edit/’,views.edit),
- ]
- 复制代码
- 当网站功能较多时可以在该功能文件夹里建一个urls.py文件,将该功能模块下的url全部写在该文件里。但是要在全局的urls.py中使用include方法实现url映射分发。
- 例如:网站有论坛模块,则在论坛模块下建个urls.py文件,将与论坛相关的页面的url全部写在这个文件里,然后在全局的urls.py文件里这样写:
- 复制代码
- from django.urls import path,include
- urlpatterns = [
- path('admin/', admin.site.urls),
- path('ant_test/',include('ant_test.urls'))
- ]
- 在论坛模块下的urls.py文件这样写:
- from django.urls import path
- urlpatterns = [
- path('news/',views.news),
- ]
- 在views.py中写对应的news函数即可。
- Django2.0版本中path(route,views.对应处理函数)等价于低版本的url(r'^route/$’,views.对应处理函数)


- 路由系统:URL
- 普通url:re_path('^index/',view.index),re_path('^home/',view.Home.as_view())
- 顺序传参:re_path(r'^detail-(\d+)-(\d+).html/',views.detail),这个用*args接收
- 关键字传参:re_path(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/',views.detail),这个用**kwargs接收,推荐使用这个
django2.0 路由规则的更多相关文章
- Django2.0路由层-URLconf
目录 DJango2.0路由层-URLconf 概述 urlpatterns 实例 path转换器 自定义path转换器 使用正则表达式 命名组(有名分组) URLconf匹配请求URL中的哪些部分 ...
- Django2.0路由补充之path,re_path及视图层
以下是Django2.0版本 正则捕获到的参数都是字符串,所以如果函数需要用的其他数据类型,可以在函数中直接转换,也可以在路由中直接转换,如下: 下面实例是匹配整数,传过去的参数就是整数 from d ...
- Django2.0——路由配置
URL配置就像是Django所支撑网站的目录,它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表.URL需要在urls.py进行配置,与其对应的视图函数写在views.py文件中.ur ...
- thinkphp5.0 路由规则配置
开启路由‘url_route_on’ => true 首页路由'/' =>'home/index/index' 其它路由(1)'route' => 'home/index/route ...
- Django2.0 path和re_path使用
Django2.0发布后,很多人都拥抱变化,加入了2的行列.但是和1.11相比,2.0在url的使用方面发生了很大的变化,下面介绍一下: 一.实例 先看一个例子: from django.urls i ...
- Django2.0 URL配置
一.实例 先看一个例子: from django.urls import path from . import views urlpatterns = [ path('articles/2003/', ...
- Django2.0 URL配置详解
转自:https://www.cnblogs.com/feixuelove1009/p/8399338.html Django2.0发布后,很多人都拥抱变化,加入了2的行列. 但是和1.11相比,2. ...
- 《玩转Django2.0》读书笔记-编写URL规则
<玩转Django2.0>读书笔记-编写URL规则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. URL(Uniform Resource Locator,统一资源定位 ...
- Django2.0中URL的路由机制
路由是关联url及其处理函数关系的过程.Django的url路由配置在settings.py文件中ROOT_URLCONF变量指定全局路由文件名称. Django的路由都写在urls.py文件中的ur ...
随机推荐
- nmap常用参数
总结: 主机发现 -sn 防止NMAP端口扫描 -SP TCP 半连接扫描,默认是通过80端口来发现主机的 -SA ACK ping 扫描 -SU UDP ping 扫描 不好 ...
- js 进制之间的转换
//十进制转其他 var x=110; alert(x); alert(x.toString(8)); alert(x.toString(32)); alert(x.toString(16)); // ...
- ReentrantLock可重入锁的原理及使用场景
摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些. 场景1:如果已加锁,则不再重复加锁 a.忽略重复加锁.b.用在界面交互时点击执行较长时间请求操作时,防止多次 ...
- [MySQL优化2]不用SELECT * FROM table;
假设有一张employees表,它有8列:员工人数,姓氏,名字,分机,电子邮件,办公室代码,报告,职位等.如果要仅查看员工的名字,姓氏和职位,请使用以下查询:SELECT lastname, firs ...
- 6个laravel常用目录路径函数
public_path() public_path函数返回public目录的绝对路径:$path = public_path(); base_path() base_path函数返回项目根目录的绝对路 ...
- Laravel编辑产品-CRUD之edit和update
上一篇讲了Laravel展示产品-CRUD之show,现在我们说一下Laravel编辑产品,涉及到编辑和更新, 1,定义controller,update和create有点相似,我们复制一份过来修改. ...
- Python3学习之路~6.6 类的继承
Inheritance 继承 面向对象编程 (OOP) 语言的一个主要功能就是“继承”.继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展.通过继承创 ...
- python的map函数
map:对指定序列做映射 python3中的: map(function, iterable, ...) map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, ...
- shell 中 标准输出和错误输出
命令 标准输出 标准错误 >/dev/null 2>&1 丢弃 丢弃 2>&1 >/dev/null 丢弃 屏幕 1>/dev/null 丢弃 屏幕 2& ...
- GCC 用户态&内核态 Makefile
转了一圈,今天再次回到C 网上一篇博文,个人感觉良心作品,故而拿来重新实现一遍,原作者原文有问题,我这里把他打通了 一.GCC Makefile //hello.c #include <stdi ...