Шаблон Django URL со списком - PullRequest
1 голос
/ 06 июня 2011

У меня есть список с именами категорий, например, cats = ["tv", "movie", "theater"].Я хотел бы написать шаблон URL, чтобы перехватывать только те URL, которые содержат один из элементов в списке, например:

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

, чтобы CATEGORY_NAME мог только один из элементов в списке cat,Как я могу это сделать?

Спасибо, Меир

Ответы [ 3 ]

4 голосов
/ 06 июня 2011

Вы можете построить часть регулярного выражения из списка, используя метод строки join Python, а затем использовать его в шаблоне 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'),
3 голосов
/ 06 июня 2011

Поскольку сопоставление URL выполняется на основе регулярного выражения, для этого можно использовать возможность регулярных выражений для сопоставления нескольких строк.|(труба) символ выбирает между несколькими вариантами, т. е. (a | b | c) будет соответствовать a, b или c.

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

Документация *1005* по регулярному выражению действительно хороша иСтоит прочитать.

0 голосов
/ 14 ноября 2018

Для Django 2+ с Python 3+ вы можете использовать следующее:

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()),
    ...
    ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...