我有一个包含类别名称的列表,例如cats = ["tv", "movie", "theater"]
。
我想写一个url模式来捕获只包含列表中某个项目的URL,例如:
url(r'^site/CATEGORY_NAME/$', 'mainsite.views.home'),
这样CATEGORY_NAME
只能列出cat中的一个项目。
我怎么能这样做?
谢谢, 梅尔
答案 0 :(得分: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'),
答案 1 :(得分:2)
由于URL匹配是基于正则表达式完成的,因此您可以使用正则表达式匹配多个字符串来执行此操作。 | (管道)字符在多个选项之间进行选择,即(a | b | c)将匹配a,b或c。
url(r'^site/(tv|movie|theatre)/$', 'mainsite.views.home'),
答案 2 :(得分:0)
对于具有Python 3+的Django 2+,您可以使用以下代码:
from django.urls import re_path
from . import views
# List of category names defined here:
_entities = ["tv", "movie", "theater"]
re_entities = f'(?P<enertainment>{"|".join(_entities)})'
urlpatterns = [
...
re_path(f'^{re_entities}/.../$', views.EntertainmentHandler.as_view()),
...
]