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

Fed*_*rer 46 regex django url django-urls

你有一个URL接受first_namelast_nameDjango:

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

如何在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'),
Run Code Online (Sandbox Code Playgroud)

如果没有创建新线,这是否可行

('^(?P<first_name>[a-zA-Z]+)/(?P<last_name>[a-zA-Z]+)/(?P<title>[a-zA-Z]+)/$','some_method'),
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 79

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

不要忘记title在视图中给出默认值.

  • 请注意,?:在外部组中很重要.没有它,导航到URL时URL将正常工作,但reverse()不会注意到里面的参数. (7认同)