Отображение на основе Django WagtailCMS SITE_ID

Как я могу создать if заблокировать отображение одного из моих боковых меню на основе WITEHMS SITE_ID?

Пробовал это, но это не работает

{% if settings.SITE_ID == 1 %}
   {% include 'includes/_home-sidebar-left.html' %}
{% else %}
   {% include 'includes/_home-sidebar.html' %}
{% endif }

1 ответ

Решение

Предполагая, что это шаблон страницы, вы можете получить доступ к текущему сайту через объект страницы с помощью page.get_site ().

При этом в ваших шаблонах вы получите магические строки / числа (для проверки идентификатора или имени сайта). Один из способов обойти это - использовать модуль wagtail.contrib.settings.

После правильной настройки модуля создайте объект настроек (который появится в админке) в myapp/wagtail_hooks.py:

from wagtail.contrib.settings.models import BaseSetting, register_setting


@register_setting
class LayoutSettings(BaseSetting):
    POSITION_LEFT = 'left'
    POSITION_RIGHT = 'right'
    POSITIONS = (
        (POSITION_LEFT, 'Left'),
        (POSITION_RIGHT, 'Right'),
    )
    sidebar_position = models.CharField(
        max_length=10,
        choices=POSITIONS,
        default=POSITION_LEFT,
    )

И использовать настройки в шаблонах myapp/templates/myapp/mytemplate.html

{% if settings.myapp.LayoutSettings.sidebar_position == 'left' %}
   {% include 'includes/_home-sidebar-left.html' %}
{% else %}
   {% include 'includes/_home-sidebar.html' %}
{% endif }
Другие вопросы по тегам