CMS-сайты с Django - PullRequest
       57

CMS-сайты с Django

1 голос
/ 08 января 2010

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

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

Есть идеи?

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2013

Вам нужен 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>
0 голосов
/ 08 января 2010

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

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

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

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

...