URL Django - Как передать список объектов через чистые URL?

Я должен реализовать структуру, подобную этому: example.com/folder1/folder2/folder3/../view (могут быть другие вещи в конце вместо "представления"),

Глубина этой структуры не известна, и может быть папка, проложенная под землей глубоко в дереве. Важно получить этот точный шаблон URL, т.е. Я не могу только пойти для example.com/folder_id

Какие-либо идеи о том, как реализовать это с диспетчером URL Django?

5
задан letoosh 2 March 2010 в 00:40
поделиться

1 ответ

Диспетчер URL-адресов Django основан на регулярных выражениях, поэтому вы может предоставить ему регулярное выражение, которое будет соответствовать желаемому пути (с повторяющимися группами). Однако я не смог найти способ, чтобы диспетчер URL-адресов django соответствовал нескольким подгруппам (он возвращает только последнее совпадение в качестве параметра), поэтому часть обработки параметров оставлена ​​для представления.

Вот пример шаблона URL:

urlpatterns = patterns('',
    #...
    (r'^(?P<foldersPath>(?:\w+/)+)(?P<action>\w+)', 'views.folder'),
)

В первом параметре у нас есть группа без захвата для повторения символов «слово», за которыми следует «/». Возможно, вы захотите заменить \ w на что-то другое, чтобы включить в него символы, отличные от алфавита и цифр.

вы, конечно, можете изменить его на несколько представлений в конфигурации URL вместо использования параметра действия (что имеет больше смысла, если у вас ограниченный набор действий):

urlpatterns = patterns('',
    #...
    (r'^(?P<foldersPath>(?:\w+/)+)view', 'views.folder_View'),
    (r'^(?P<foldersPath>(?:\w+/)+)delete', 'views.folder_delete'),
)

и в представлениях мы разделяем первый параметр чтобы получить массив папок:

def folder(request, foldersPath, action):
    folders = foldersPath.split("/")[:-1]
    print "folders:", folders, "action:", action
    #...
5
ответ дан 14 December 2019 в 19:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: