在django 2.1中将url正则表达式转换为路径

时间:2018-11-06 13:45:50

标签: python django django-urls

url(r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        views.activate, name='activate'),

我一直在做教程,但是在django 2.1中,您必须使用path,如何转换为2.1 django兼容路径函数?

path('activate/<str:uidb64>/<uuid:token>/', views.activate, name='activate')

做同样的事吗?

1 个答案:

答案 0 :(得分:3)

  

我一直在做教程,但是在django 2.1中,您必须使用path,如何转换为2.1 django兼容路径函数?

,在中,您可以使用path [Django-doc]re_path [Django-doc]。此外,到目前为止,url [Django-doc]仍受支持,但将来可能会消失。

re_path实际上等效于旧的url,因此您可以这样写:

re_path(
    r'^activate/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
    views.activate,
    name='activate'
),

构造一个完全等效的URL并不容易,因为Django仅支持five path conversions by default

  

路径转换器

     

默认情况下,以下路径转换器可用:

     
      
  1. str-匹配除path分隔符'/'以外的任何非空字符串。如果表达式中不包含转换器,则为默认设置。
  2.   
  3. int-匹配零或任何正整数。返回int
  4.   
  5. slug-匹配任何由ASCII字母或数字以及连字符和下划线字符组成的slug字符串。例如,   建筑物1st-django网站。
  6.   
  7. uuid-匹配格式化的UUID。为防止多个URL映射到同一页面,必须包括破折号和字母   小写。例如075194d3-6885-417e-a8a8-6c931e272f00。退货   UUID实例。
  8.   
  9. path-匹配任何非空字符串,包括path分隔符'/'。这使您可以匹配完整的URL   path,而不是像path一样只是URL str的一部分。
  10.   

我们可以在此处使用slug,但这将比给定的URL匹配更多

path(
    r'^activate/(<slug:uidb64>/<slug:token>/$',
    views.activate,
    name='activate'
),

slug pattern takes as regex equivalent

class SlugConverter(StringConverter):
    regex = '[-a-zA-Z0-9_]+'