欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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。
django.urls中的path,include和re_path

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有两种具体形式:

  1. 简单形式(pattern),不提取参数:
articles/([0-9]{4})/
  1. 命名形式(?P<name>pattern),提取参数,统一为str类型:
articles/?P<year>[0-9]{4}/

year就是参数的名字

include()则主要用于转移到局部路由

在二级路由(也即app的urls文件中),在urlpatterns后,应该加上app_name=‘app_name(你的app名称)’,否则会报错。