将 url 正则表达式翻译成 django 2.1 中的路径

Kam*_*nar 2 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'),
Run Code Online (Sandbox Code Playgroud)

我一直在做教程,但在 django 2.1 中你必须使用路径,我如何转换为 2.1 django 兼容路径功能?

是否

path('activate/<str:uidb64>/<uuid:token>/', views.activate, name='activate')
Run Code Online (Sandbox Code Playgroud)

照着做?

Wil*_*sem 6

我一直在做教程,但在 django 2.1 中你必须使用路径,我如何转换为 2.1 django 兼容路径功能?

,在,您可以使用path[Django-doc]re_path[Django-doc]。此外,截至今天,仍然支持url[Django-doc],但将来可能会消失。

re_path实际上相当于 old 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'
),
Run Code Online (Sandbox Code Playgroud)

构建一个完全等效的 URL 并不容易,因为 Django默认只支持五种路径转换

路径转换器

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

  1. str- 匹配任何非空字符串,不包括path分隔符'/'. 如果表达式中不包含转换器,则这是默认设置。
  2. int- 匹配零或任何正整数。返回一个int.
  3. slug- 匹配任何slug由 ASCII 字母或数字以及连字符和下划线字符组成的字符串。例如,building-your-1st-django-site。
  4. uuid- 匹配格式化的UUID. 为防止多个 URL 映射到同一页面,必须包含破折号且字母必须为小写。例如,075194d3-6885-417e-a8a8-6c931e272f00。返回一个UUID实例。
  5. path- 匹配任何非空字符串,包括path分隔符“/”。这允许您匹配一个完整的 URL, path而不是pathstr.

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

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

slug模式相当于正则表达式

class SlugConverter(StringConverter):
    regex = '[-a-zA-Z0-9_]+'
Run Code Online (Sandbox Code Playgroud)