Я должен реализовать структуру, подобную этому: example.com/folder1/folder2/folder3/../view (могут быть другие вещи в конце вместо "представления"),
Глубина этой структуры не известна, и может быть папка, проложенная под землей глубоко в дереве. Важно получить этот точный шаблон URL, т.е. Я не могу только пойти для example.com/folder_id
Какие-либо идеи о том, как реализовать это с диспетчером URL Django?
Диспетчер 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
#...