2010-02-24 75 views
39

你有一个接受的Django一个first_namelast_name网址:制作一个正则表达式的Django 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'), 
新行

回答

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

不要忘了给title中的默认值视图。

+0

谢谢你。我将如何制作一个只有可选'标题'的URL?即?(?:/(?P [a-zA-Z] +))?(?:/(?P [a-zA-Z] +))?'感谢您的任何帮助 – Federer 2010-02-24 15:19:01

+7

请注意, :在外部组中很重要。没有它,URL会在导航时正常工作,但reverse()不会注意到内部的参数。 – Chris 2013-01-28 19:56:04

+1

反向使用此操作失败,创建了2个url ... – radtek 2014-08-18 20:51:39