Как включить мезонинную страницу с заданным ярлыком в базовый шаблон?

Я пытаюсь включить страницу, редактируемую через администратора мезонина, на все страницы моего сайта. Я прочитал документ Mezzanine и исходный код и не могу понять, как это сделать.

Из документов я подумал, что могу передать свою страницу в качестве дополнительного контекста, например:

mezzanine.pages.views.page(request, slug, template=u'pages/page.html', extra_context={'mypage':<get_page_by_its_slug>})

Но документ говорит, что дополнительный контекст — это объект mezzanine.pages.middleware.PageMiddleware, который устанавливает слаг из запроса.

Нужно ли для этого писать контекстный процессор? Как загрузить определенную страницу по ее слагу?


person user1255933    schedule 17.05.2013    source источник


Ответы (1)


На всякий случай, если это кому-то поможет, я создал контекстный процессор для решения этой проблемы:

# context_processors.py
from mezzanine.pages.models import Page

def featured(request):
    # editable page, get by ID or slug or title...
    featured_page = Page.objects.get(id=49)
    return {'featured_page': featured_page}

добавил обработчик контекста в мой settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
   "django.contrib.auth.context_processors.auth",
   ## ...etc...,
   "myapp.context_processors.featured",
)

и включил рекомендуемый контент в шаблон base.html:

{% block right_panel %}
<div>
    {% editable featured_page.richtextpage.content %}
        {{ featured_page.richtextpage.content|richtext_filter|safe }}
        {% endeditable %}
</div>
{% endblock %}

Если вы знаете более простой способ сделать это, я хотел бы услышать ваше решение!

person user1255933    schedule 17.05.2013
comment
В этом случае, хотя это и работает, это означает, что объект Featured_page присутствует на любой странице, что в зависимости от того, насколько большим может быть этот объект, может создать некоторые накладные расходы. - person KhoPhi; 16.10.2015
comment
Великолепно! Благодарю вас! - person Sean Halls; 17.04.2018