如何将具有给定slug的夹层页面包含到基本模板中?

时间:2013-05-17 02:45:52

标签: django mezzanine

我正在尝试通过夹层管理员在我网站的所有页面中添加可编辑的页面。我通读了Mezzanine文档和来源,但无法弄清楚如何做到这一点。

从文档中,我认为我可以将我的页面作为额外的上下文传递,例如:

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

但是文档说额外的上下文是一个mezzanine.pages.middleware.PageMiddleware对象,它从请求中设置了slug。

我是否需要编写上下文处理器来执行此操作?如何通过slug加载特定页面?

1 个答案:

答案 0 :(得分:8)

为了防止有人在那里,我创建了一个上下文处理器来解决这个问题:

# 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 %}

如果您知道更简单的方法,我很乐意听取您的解决方案!