django 2.0路由配置变化

 

urlpatterns变量​​的语法

urlpatterns应该是path()和/或re_path()实例的Python列表。

  1. 首先,Django会使用根路由解析模块(root URLconf)来解析路由。 通常,这是ROOT_URLCONF设置的值,但是如果传入的HttpRequest对象具有urlconf属性(由中间件设置)那么ROOT_URLCONF的设置将被其替换。
  2. 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路径的一部分。

猜你喜欢

转载自www.cnblogs.com/chaiming/p/9253705.html