Как мне сформировать URL в Django для того, что я делаю - PullRequest
1 голос
/ 29 августа 2009

Отчаянно, пожалуйста, помогите. Будет работать за еду:)

Я хочу иметь возможность иметь страницы по следующим URL-адресам, и я хочу иметь возможность просматривать их по их URL-адресу (т. Е. Если кто-то переходит на определенный URL-адрес, я хочу иметь возможность проверить страницу есть).

mysite.com/somepage/somesubpage/somesubsubpage/
mysite.com/somepage/somesubpage/anothersubpage/
mysite.com/somepage/somesubpage/somesubpage/
mysite.com/somepage/somepage/

Обратите внимание, я хочу иметь возможность повторно использовать слаг каждой страницы (например, somepage / somepage). Конечно, каждый слаг будет уникальным по своему уровню (т. Е. Не может иметь две страницы с mysite.com/somepage/other/ и mysite.com/somepage/other/, потому что по сути они будут одной и той же страницей). Какой хороший способ сделать это. Я попытался сохранить слаг для страницы ('somesubpage') в поле с именем 'slug' и сделать каждый слаг уникальным для своей родительской страницы, чтобы вышеописанное обстоятельство не могло произойти. Проблема заключается в том, что если я пытаюсь найти страницу по ее слагу (то есть «somepage»), и на mysite.com/other/somepage/ и mysite.com/page/somepage/ появляется страница Как мое приложение узнает, какое из них получить (у обоих одинаковый слаг «somepage»).

Ответы [ 2 ]

2 голосов
/ 29 августа 2009

Вам также необходимо хранить атрибуты level и parent, чтобы вы всегда могли получить нужный объект.

Требование хранения иерархических данных возникает очень часто, и я всегда рекомендую django-mptt . Это реализация Django эффективного алгоритма хранения иерархических данных в базе данных. Я использовал его в нескольких проектах. В основном, кроме хранения уровня и родительского элемента, он также сохраняет left и right для каждого объекта, чтобы он мог однозначно описать дерево и все его подэлементы. На домашней странице проекта есть несколько пояснительных ссылок.

0 голосов
/ 29 августа 2009

Похоже, вы ищете приложение CMS. Существует сравнение нескольких CMS на основе Django. Если вам нужна полнофункциональная CMS в центре вашего проекта, подойдет DjangoCMS 2 или django-page-cms . Если вы предпочитаете CMS, которая поддерживает базовые сценарии использования CMS, но в большинстве случаев вам не по вкусу, то feincms может быть чем-то, на что стоит обратить внимание.

edit: кстати, большинство CMS на странице сравнения использует django-mptt, о котором упоминает Даниэль.

...