标签:指定 request view 字符串类 返回 pattern value 兼容 正则表达
先看一个例子:
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的基本都是相同的,就是在写法上面有那么点小小的区别。
后面的章节中,你只需要使用from django.urls import re_path
正确导入re_path()
方法,并用它替换url()
方法就可以了。
标签:指定 request view 字符串类 返回 pattern value 兼容 正则表达
原文地址:https://www.cnblogs.com/navysummer/p/10200188.html