制作正则表达式Django URL令牌可选

问题描述 投票:46回答:2

您有一个在Django中接受first_namelast_name的URL:

('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/$','some_method'),

您将如何包含title的可选URL令牌,而不创建任何新行。我的意思是,在理想情况下:

#A regex constant
OP_REGEX = r'THIS IS OPTIONAL<title>[a-z]'
#Ideal URL
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/OP_REGEX/$','some_method'),

是否可以在不创建新行的情况下进行?

('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/(?P<title>[a-zA-Z]+)/$','some_method'),
regex django url django-urls
2个回答
78
投票
('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)(?:/(?P<title>[a-zA-Z]+))?/$','some_method'),

不要忘记在视图中为title提供默认值。


0
投票

如果您要查找多个可选参数,而没有任何必需参数,则只需在开头省略“ /”,例如:

re_path(r'^view(?:/(?P<dummy1>[a-zA-Z]+))?(?:/(?P<dummy2>[a-zA-Z]+))?(?:/(?P<dummy3>[a-zA-Z]+))?/$', views.MyView.as_view(), name='myname'),

您可以浏览:

http://localhost:8000/view/?dummy1=value1&dummy2=value2&dummy3=value3
© www.soinside.com 2019 - 2024. All rights reserved.