django: рекурсивное / древовидное отображение URL для CMS? - PullRequest
2 голосов
/ 25 февраля 2011

Я перестраиваю веб-сайт, на котором много контента, добавляемого пользователями (посты, фотографии, события и т. Д.). Этот контент попадает в разделы (музыка, магазин и т. Д.); то есть нормальная CMS.

Я хочу, чтобы каждый фрагмент контента наследовался от базового объекта контента (многостоловое наследование). Это означает, что весь контент можно легко запрашивать, он аккуратный и расширяемый (и нет необходимости переписывать все базовые вещи, такие как «creation_by», «title», «slug» и т. Д.)

ContentObj
    > Blog Post obj
    > Event Post obj
    > Podcast Post obj
    > ... etc.

Довольно прямолинейно.

Когда дело доходит до организации, различные объекты контента / модели должны иметь возможность быть назначенными разделу (то есть объект подкаста находится в разделе «Музыка»). Кроме того, раздел должен иметь возможность назначать себя родительскому разделу ('Words> Blog> General>'). Опять же, это довольно стандартная идея в CMS.

В идеале, я хочу, чтобы такая организация была полностью универсальной (так же, как у меня есть универсальное решение для контента). Я имею в виду древовидную структуру, в которой каждый узел представляет собой либо секцию, либо модель объекта contentobject.

root
    > section1
        > subsection 1 > contentobj1
        > subsection 2 > contentobj2
    > section2
        > contentobj3

    > contentobj4

Цель этой универсальной настройки - получить очень СУХОЙ схему URL-адресов и систему шаблонов. Вам потребуется всего два или три шаблона. Вы заполняете страницу в зависимости от того, какой URL запрошен пользователем, и вам никогда не нужно жестко кодировать URL, такие как / blog ///.

У меня проблемы с пониманием того, как написать эту древовидную структуру в приложении, управляемом базой данных. Было бы легко иметь раздел модели, которому вы можете назначить модели контента. Но когда дело доходит до подразделов, это немного сложнее. Кроме того, как абстрагировать схему URL-адреса, чтобы раздел мог иметь столько подсекций, которые указывают на объект содержимого, без фактического жесткого кодирования URL-адресов?

По сути, я хочу написать структуру / каркас, где контент и организация отделены друг от друга, а схема URL / шаблона полностью отделена от фактического контента. Раньше у меня было бы приложение-блог, приложение-событие, но наверняка у меня должно было быть приложение-контент, которое управляет всем контентом сайта, и, возможно, приложение-организация, которое управляет разделами и т. Д.

Ответы [ 2 ]

4 голосов
/ 25 февраля 2011

Для реализации дерева в ваших моделях, обратитесь к разделу Деревья и графики для пакетов django я использовал и рекомендую django-mptt

Кстати, почему бы вам не взглянуть на django-cms . Это отличное приложение, которое действительно гибкое и имеет множество точек расширения для интеграции ваших собственных приложений.

1 голос
/ 25 февраля 2011

Мне нравится этот вопрос.Это то, что у меня просачивалось в затылке с тех пор, как я покинул Plone-Land (не то, чтобы я не возвращался туда время от времени).

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

Оттуда я бы покопался вадминистратору, чтобы посмотреть, как он работает с динамической генерацией URL-адреса и оттуда, используя функции, предоставляемые пакетом дерева, для создания URL-адресов для моего дерева контента.

...