在源自Wagtail页面模型的模板上,右下角有一个小的Wagtail图标/菜单。这提供了编辑页面和/或跳转到Wagtail Admin的快速方法。但是,此菜单不会出现在并非源自Wagtail Page模型的自定义视图模板上。
如何告诉Wagtail在前端模板上显示小菜单,以便页面具有一致的导航?
答案 0 :(得分:2)
标准的Wagtail用户栏通过放置在模板中来呈现:
{% load wagtailuserbar %}
{% wagtailuserbar 'top-left' %}
我通常将以上内容放在base.html
中。当然,'top-left'
的名称告诉模板标记在何处呈现用户栏。 Reference
但是,只为Wagtail页面呈现wagtailuserbar。您想要做的是仅使用Go to Wagtail Admin选项渲染用户栏(因为没有其他相关选项)。因此,您可以创建自己的模板标签,并将其放在base.html
旁边的wagtailuserbar
中。您将对其进行设置,以使其在上下文中没有page
时呈现(wagtailuserbar
模板标签检查以确保上下文中没有page
)。要创建标签,只需从wagtailuserbar.py
中的代码开始,然后对其进行修改以创建名为wagtailuserbar_admin_only
(未经测试)的模板标签:
from django import template
from django.template.loader import render_to_string
from wagtail.admin.templatetags.wagtailuserbar import get_page_instance
from wagtail.admin.userbar import (AdminItem)
@register.simple_tag(takes_context=True)
def wagtailuserbar_admin_only(context, position='bottom-right'):
# Find request object
try:
request = context['request']
except KeyError:
return ''
# Don't render without a user because we can't check their permissions
try:
user = request.user
except AttributeError:
return ''
# Don't render if user doesn't have permission to access the admin area
if not user.has_perm('wagtailadmin.access_admin'):
return ''
# Only render if the context does NOT contain a variable referencing a saved page
page = get_page_instance(context)
if page:
return ''
# Render the items
rendered_items = [AdminItem()]
# Render the userbar items
return render_to_string('wagtailadmin/userbar/base.html', {
'request': request,
'items': rendered_items,
'position': position,
})
然后,要在模板中使用,请放在base.html
中:
{% load wagtailuserbar_admin_only %}
{% wagtailuserbar_admin_only 'top-left' %}