标签:配置 重点 语法 异常 对象 一段 概念 理解 code
Django2.0发布后,很多人都拥抱变化,加入了2的行列。
但是和1.11相比,2.0在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都带一个最前面的/
,既然大家都有的部分,就不用浪费时间特别写一个了。匹配例子:
默认情况下,Django内置下面的路径转换器:
/
,如果你没有专门指定转换器,那么这个是默认使用的;其实就是写一个类,并包含下面的成员和属性:
例如,新建一个converters.py文件,与urlconf同目录,写个下面的类:
class FourDigitYearConverter: regex = ‘[0-9]{4}‘ def to_python(self, value): return int(value) def to_url(self, value): return ‘%04d‘ % value
写完类后,在URLconf 中注册,并使用它,如下所示,注册了一个yyyy:
from django.urls import register_converter, path from . import converters, views register_converter(converters.FourDigitYearConverter, ‘yyyy‘) urlpatterns = [ path(‘articles/2003/‘, views.special_case_2003), path(‘articles/<yyyy:year>/‘, views.year_archive), ... ]
Django2.0的url虽然改‘配置’了,但它依然向老版本兼容。而这个兼容的办法,就是用re_path()
方法代替path()
方法。re_path()
方法在骨子里,根本就是以前的url()
方法,只不过导入的位置变了。下面是一个例子,对比一下Django1.11时代的语法,有什么太大的差别?
from django.urls import path, re_path from . import views urlpatterns = [ path(‘articles/2003/‘, views.special_case_2003), re_path(‘articles/(?P<year>[0-9]{4})/‘, views.year_archive), re_path(‘articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/‘, views.month_archive), re_path(‘articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-_]+)/‘, views.article_detail), ]
与path()
方法不同的在于两点:
path()
方法中可以指定转换成某种类型。在视图中接收参数时一定要小心。除了上面的部分,Django2.0路由系统其它的知识点和Django1.11的基本都是相同的,就是在写法上面有那么点小小的区别。
你只需要使用from django.urls import re_path
正确导入re_path()
方法,并用它替换url()
方法就可以了。
标签:配置 重点 语法 异常 对象 一段 概念 理解 code
原文地址:https://www.cnblogs.com/fu-yong/p/9644511.html