urlpatterns
变量的语法
urlpatterns
应该是path()
和/或re_path()
实例的Python列表。
- 首先,Django会使用根路由解析模块(root URLconf)来解析路由。 通常,这是
ROOT_URLCONF
设置的值,但是如果传入的HttpRequest
对象具有urlconf
属性(由中间件设置)那么ROOT_URLCONF
的设置将被其替换。 - Django加载该Python模块并查找变量
urlpatterns
。 它应该是django.urls.path()
或者django.urls.re_path()
实例的Python列表。
path 是新的方法,re_path方法和原来的url用法一致,使用正则表达式
代码:
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]
变化:
不在使用url函数,转而使用path转换器
直接在url中表示捕获的参数类型,
提取的参数会进行类型转换,不像正则表达式中都是捕获字符串
不以斜杠结尾则匹配不到
- 要从URL捕获某个值,使用尖角括号。
- 捕获的值可以选择包含一个转换器类型。 例如, 使用
<int:name>
来捕获一个整形参数。 如果没有包含转换器, 那么除了/
字符外, 会匹配任意字符串。
- 对
/articles/2005/03/
的请求将与列表中的第三个条目匹配。 Django会调用函数views.month_archive(request, year=2005, month=3)
。
/articles/2003
不会匹配到任何一个模式,因为每个模式都要求URL以斜杠结尾。
转换器类型以下路径转换器默认可用:
str
- 匹配除了路径分隔符'/'
的任意非空字符串。 如果表达式中没有包含转换器,那么这将是默认行为。int
- 匹配0或任意正整数。 并作为 int 返回。slug
- 匹配任意的黏接字符串(slug string),这些黏接字符串是ASCII的字母或数字,词与词之间由连字符或下划线黏接组成。 例如,building-your-1st-django-site
。uuid
- 匹配一个格式化的 UUID. 为了防止多个URL映射到同一页面,必须包含多个破折号(dash),同时字母必须小写。 例如,075194d3-6885-417e-a8a8-6c931e272f00
. 返回一个UUID
实例。path
- 匹配包含路径分隔符'/'
在内的任意非空字符串。 相对于str
,这允许你匹配一个完整的URL路径,而不仅仅是URL路径的一部分。