#新的2.x版本导入path,导入简化 from django.urls import path #原来的1.x版本url方式,conf子包 from django.conf.urls import url但是之前的 url 模块并没有废止,只是 Django 强烈建议我们使用新模块 path 进行路由的匹配。从对比可以看出 Django 2.0 简化了路由 path 的导入方法。
path(route,view,kwargs,name)
它可以接收 4 个参数,其中前两个是必填参数后两个为可选参数。参数解析如下:
#1.x url方法
url(r'^test/(?P<year>[0-9]{4})/$', views.year_test),
#2.x path方法
path('test/<int:year>/', views.year_test),
int 支持整数类型的转化,在上述的例子中, year_test 函数接收到的 year 参数就变成整数而不是字符串,从而避免在视图中使用 year=int(year)。
path 函数定义的 <int:year> 规则会捕获到 URL 中的值,映射给视图中的同名参数 year ,并根据转换器将参数值转换为指定的类型,这里对应 int 大于等于 0 的整数。之所以使用转化器,有以下两个原因:#views.py 视图函数 def year_test(request, year): year = int(year) # 转换整形 def num1_view(request, id): pass def num2_view(request, id): pass def num3_view(request, id): passurls.py 中配置路由如下所示:
from django.conf.urls import url #引入url方法
urlpatterns = [
url('test/(?P<year>[0-9]{4})/', year_tst),
url('test/(?P<id>[a-zA-Z0-9]+)/num/', num_view),
url('test/(?P<id>[a-zA-Z0-9]+)/num1/', num1_view),
url('test/(?P<id>[a-zA-Z0-9]+)/num2/', num2_view),
]
利用 path 方法中提供的类型转换器就很好的解决了这一问题。
(?P<name>pattern)
其中,尖括号里的name为分组名,pattern为正则表达式。re_path()同样包含于django.urls模块中,所以同样使用如下方式进行导入。示例如下:
from django.urls import path, re_path #导入re_path
from . import views
urlpatterns = [
re_path('test/(?P<year>[0-9]{4})/', views.year_test),
re_path('test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.month_test),
re_path('test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[^/]+)/', views.article_test),
re_path 其实相当于 Django 1.x 中的 url 方法。它们两的用法是一致的,所以在这里就不多加赘述了。
分布式路由使用到的 include 函数同样使用 from django.urls import include 来引入
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有