标签:版本兼容 列表 str 保存 概念 sel 知识点 python detail
先看一个例子:
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(r‘^articles/(?P<year>[0-9]{4})/$‘, views.year_archive), re_path(r‘^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$‘, views.month_archive), re_path(r‘^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$‘, views.article_detail), ]
与path()
方法不同的在于两点:
path()
方法中可以指定转换成某种类型。在视图中接收参数时一定要小心。除了上面的部分,Django2.0路由系统其它的知识点和Django1.11的基本都是相同的,就是在写法上面有那么点小小的区别。
至此。转载请注明出处。
[参考:http://www.liujiangblog.com]
标签:版本兼容 列表 str 保存 概念 sel 知识点 python detail
原文地址:https://www.cnblogs.com/wcwnina/p/9502060.html