使用 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'),
我已经进行了多次尝试以使其适应路径,包括(pagename
是 index
函数中的参数):
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'),
我正在学习有关创建 Django 应用程序的旧教程。在修改页面 URLs 的部分中,教程使用带有捕获组的正则表达式将 URL 中的参数传递给视图。
我使用的是 Django 2.0,所以我使用的是 path
而不是 url
,我想知道正则表达式的正确替换是什么。我现在已经通过使用 re_path
解决了这个问题,但我想知道在 Django 2.0 中它应该如何实际完成。
旧密码是:
url(r'([^/]*)', views.index, name='index'),
我已经进行了多次尝试以使其适应路径,包括(pagename
是 index
函数中的参数):
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'),