Подсайты CMS с Django

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

Проблема возникает, когда я хочу интегрировать CMS в эту систему, чтобы позаботиться о структуре меню и текстовом контенте. Как мне обрабатывать два разных меню для разных пользовательских интерфейсов? Я взглянул на django-cms и django-page-cms, и они, похоже, поддерживают только одну иерархию меню.

Есть идеи?

Одним из грязных решений было бы добавить, например. другой префикс для каждого пункта меню пользовательского интерфейса в CMS и взломать код CMS, чтобы он вставлял только пункты меню для правильного пользовательского интерфейса (заданного в качестве параметра тега шаблона show_menu).

Было бы лучше, если бы можно было иметь несколько экземпляров приложения CMS, чтобы у каждого из них также были свои собственные таблицы базы данных. Но возможно ли это с django и, например. django-cms или django-page-cms?

Некоторые дополнительные ограничения:

  • CMS должна поддерживать локализацию
  • Я бы предпочел запустить один экземпляр Django, чтобы упростить настройку и тестирование.

person anttikoo    schedule 08.01.2010    source источник


Ответы (2)


Я не использовал django-cms, так что это просто не приходит мне в голову.

В документах есть раздел под названием Extending the menu, который выглядел многообещающе. К сожалению, большая часть их конфигурации находится в settings.py, потому что похоже, что вы можете манипулировать их CMS_TEMPLATES, чтобы использовать разные базовые шаблоны (и т. д.) для разных пользователей. Один из способов обойти это (при условии, что нет более прямого маршрута) — добавить что-то в UserProfile, которое идентифицирует пользователя как потребителя/производителя. Затем в вашем base.html вы делаете:

{% if user.get_profile.consumer %}
 ...
{% else %}
 ...
{% endif %}

Это эффективно дает вам два совершенно разных варианта внешнего вида в зависимости от типа пользователя. Я также отмечу, что {% extends %} может принимать либо строковую константу , либо строковую переменную, поэтому вы можете использовать context_processor для установки имени расширяемого шаблона.

person Peter Rowell    schedule 08.01.2010

Вам нужен show_menu_below_id тег django-cms. Создайте потребителей и производителей страниц с их соответствующими идентификаторами (расширенный набор полей в нижней части формы страницы), а затем начните строить иерархию страниц для каждого из них.

Затем в шаблонах используются теги:

<ul>
  {% if user.get_profile.consumer %}
    {% show_menu_below_id "consumer" %}
  {% else %}
    {% show_menu_below_id "provider" %}
  {% endif %}
</ul>
person Darwin    schedule 25.04.2013