2011-06-06 115 views
1

我有一个包含类别名称的列表,例如cats = ["tv", "movie", "theater"]。 我想编写一个URL模式只能捕捉包含在列表中的项目的一个网址,如:Django包含列表的网址格式

url(r'^site/CATEGORY_NAME/$', 'mainsite.views.home'), 

使CATEGORY_NAME只能有一个列表中的猫项目之一。 我该怎么做?

感谢, 梅厄

回答

3

您可以使用python的字符串join方法从列表中构建正则表达式的一部分,然后在URL模式中使用该方法。

例如:

cats = ["tv", "movie", "theater"] 
cats_re = '(?:' + '|'.join(cats) + ')' 

# ...then... 
url(r'^site/' + cats_re + '/$', 'mainsite.views.home'), 

在这种情况下,整个正则表达式将如下所示:

url(r'^site/(?:tv|movie|theater)/$', 'mainsite.views.home'), 
+0

如果你也想的类别传递给视图命名参数:'网址(r'^ site /(?P tv |电影院)/ $','mainsite.views.home')' – dotcomly 2017-07-01 21:53:50

2

由于URL匹配基于正则表达式,你可以使用正则表达式来匹配多个字符串来做到这一点的能力来完成。 | (管道)字符在多个选项之间选择,即(a | b | c)将匹配a,b或c。

url(r'^site/(tv|movie|theatre)/$', 'mainsite.views.home'), 

Python regular expression documentation是真的很好,值得一读。