django.urls中的path,include和re_path
程序员文章站
2022-03-10 09:17:24
...
函数 path() 具有四个参数,两个必须参数:route 和 view,两个可选参数:kwargs 和 name。即路由和视图是必填参数。
1、path()参数:route
route 是一个匹配URL的准则(类似正则表达式)。当Django响应一个请求时,它会从urlpatterns的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。
这些准则不会匹配GET和POST参数或域名。例如,URLconf在处理请求https://www.example.com/myapp/时,它会尝试匹配myapp/。处理请求https://www.example.com/myapp/?page=3 时,也只会尝试匹配 myapp/。
2、path()参数:view
当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个HttpRequest对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。
3、path()参数:kwargs
任意个关键字参数可以作为一个字典传递给目标视图函数。
4、path()参数:name
为你的URL取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个URL模式。
上面介绍的path中,第一个参数route使用的是非正则表达式可以表示的普通路由路径。
注意:
要从URL捕获值,请使用尖括号。
捕获的值可以选择包括转换器类型。例如,用于 int:name捕获整数参数。如果未包含转换器/,则匹配除字符之外的任何字符串。
没有必要添加前导斜杠,因为每个URL都有。例如,应该写articles,而不是/articles。
如
path('articles/2018/01/learn_django', views.article_detail)
那么article_detail中的提取参数可以写为:
views.article_detail(request, year=2018, month=1, msg=learn_django)
而如果遇上路径和转换器语法都不足以定义的URL模式,那么就需要使用正则表达式,这时候就需要使用re_path(),而非path()。
from django.urls import re_path
re_path有两种具体形式:
- 简单形式(pattern),不提取参数:
articles/([0-9]{4})/
- 命名形式
(?P<name>pattern)
,提取参数,统一为str类型:
articles/?P<year>[0-9]{4}/
year就是参数的名字
include()则主要用于转移到局部路由
在二级路由(也即app的urls文件中),在urlpatterns后,应该加上app_name=‘app_name(你的app名称)’,否则会报错。
推荐阅读
-
php中的路径问题与set_include_path使用介绍
-
Django中URLconf和include()的协同工作方法
-
postgresql中的Search_path和schema的概念
-
jsp中include指令静态导入和动态导入的区别详解
-
详解Node.js中path模块的resolve()和join()方法的区别
-
django中're_path'的用法
-
set_include_path在win和linux下的区别
-
php中的路径问题与set_include_path使用介绍
-
Python中.join()和os.path.join()两个函数的用法详解
-
PHP中include和require的使用详解