带有列表的 Django URL 模式

Mei*_*eir 2 django

我有一个包含类别名称的列表,例如cats = ["tv", "movie", "theater"]。我想编写一个 url 模式来仅捕获包含列表中项目之一的 URL,例如:

url(r'^site/CATEGORY_NAME/$', 'mainsite.views.home'),
Run Code Online (Sandbox Code Playgroud)

这样CATEGORY_NAME就只能列出猫中的一项。我怎样才能做到这一点?

谢谢,梅尔

Dav*_*lis 6

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

例如:

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

# ...then...
url(r'^site/' + cats_re + '/$', 'mainsite.views.home'),
Run Code Online (Sandbox Code Playgroud)

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

url(r'^site/(?:tv|movie|theater)/$', 'mainsite.views.home'),
Run Code Online (Sandbox Code Playgroud)

  • 如果您还想将类别作为命名参数传递给视图: `url(r'^site/(?P<category>tv|movie|theater)/$', 'mainsite.views.home')` (3认同)

And*_*son 5

由于 URL 匹配是基于正则表达式完成的,因此您可以使用正则表达式匹配多个字符串的能力来执行此操作。的| (pipe) 字符在多个选项之间进行选择,即 (a|b|c) 将匹配 a、b 或 c。

url(r'^site/(tv|movie|theatre)/$', 'mainsite.views.home'),
Run Code Online (Sandbox Code Playgroud)

Python的正则表达式的文档实在是相当不错,值得一读。