2011-06-06 91 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是真的很好,值得一讀。