关于Django2.x版本的urls的调度问题

今天学习url的带参传递法时,在path中使用正则表达式报错了,查看了官方的文档,官方文档给出一个配置:

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中捕获值,而且官方文档还给了一个使用的规则:

  • str- 匹配除路径分隔符之外的任何非空字符串’/‘。如果转换器未包含在表达式中,则这是默认值。
  • int - 匹配零或任何正整数。返回一个int。
  • slug - 匹配由ASCII字母或数字组成的任何slug字符串,以及连字符和下划线字符。例如, building-your-1st-django-site。
  • uuid - 匹配格式化的UUID。要防止多个URL映射到同一页面,必须包含短划线并且字母必须为小写。例如,075194d3-6885-417e-a8a8-6c931e272f00。返回一个 UUID实例。
  • path- 匹配任何非空字符串,包括路径分隔符 ‘/‘。这使您可以匹配完整的URL路径,而不仅仅是URL路径的一部分str。

当然,如果路径和转换器语法不足以定义URL模式,则还可以使用正则表达式,这里面正则不是写入到path()中了,而是卸载re_path()中:

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),
]
本博客所有文章如无特别注明均为原创。作者:止语复制或转载请以超链接形式注明转自 止语
原文地址《关于Django2.x版本的urls的调度问题

相关推荐

网友评论(0)