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

时间:2010-02-24 11:06:24

标签: regex django url django-urls

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

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

如何在不创建任何新行的情况下包含title的可选网址标记。我的意思是,在一个理想的情况下:

#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'),

2 个答案:

答案 0 :(得分:76)

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

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

答案 1 :(得分: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