使用 Django 2.0 捕获组

Capturing group with Django 2.0

我正在学习有关创建 Django 应用程序的旧教程。在修改页面 URLs 的部分中,教程使用带有捕获组的正则表达式将 URL 中的参数传递给视图。

我使用的是 Django 2.0,所以我使用的是 path 而不是 url,我想知道正则表达式的正确替换是什么。我现在已经通过使用 re_path 解决了这个问题,但我想知道在 Django 2.0 中它应该如何实际完成。

旧密码是:

url(r'([^/]*)', views.index, name='index'),

我已经进行了多次尝试以使其适应路径,包括(pagenameindex 函数中的参数):

path('/<pagename>', views.index, name='index'),
path('/<str:pagename>', views.index, name='index'),
path('/<str:pagename>/', views.index, name='index'),

等None 我可以想出的排列有效,但我每次都收到 404 错误。

让我们先来看看url(..):

url(r'([^/]*)', views.index, name='index'),

这意味着您接受每个路径包含零个或多个 不是 斜杠的字符(这就是 [^/] 的意思,它意味着一个字符组包含所有但斜线字符,Kleene星*表示零个或多个repititons)。

现在通常在 Django 中会在末尾添加一个斜线,但路径应该而不是以斜线开头。所以应该工作的 path(..) 是:

path(<b>'<str:pagename>/'</b>, views.index, name='index'),

由于 str 也不接受斜线,现在两者是等价的,除了 str 应该至少包含 一个 特点。例如,我们可以使用两个 path(..)s 来包含空字符串:

path(<b>''</b>, views.index, name='index', kwargs={'pagename': ''}),
path(<b>'<str:pagename>/'</b>, views.index, name='index'),