如何将 Wagtail 'admin' 菜单添加到自定义模板?
How to add Wagtail 'admin' menu to custom templates?
在派生自 Wagtail Page 模型的模板上,右下角有一个小 Wagtail icon/menu。这提供了一种快速编辑页面 and/or 跳转到 Wagtail Admin 的方法。但是,此菜单不会出现在不是派生自 Wagtail 页面模型的自定义视图模板上。
如何让 Wagtail 在我的前端模板上显示小菜单,以便页面具有一致的导航?
标准的 Wagtail 用户栏通过放置在您的模板中呈现:
{% load wagtailuserbar %}
{% wagtailuserbar 'top-left' %}
我通常只是将上面的内容放在 base.html
中。 'top-left'
指定,当然,告诉模板标记在哪里呈现用户栏。 Reference
但是,wagtailuserbar 只为 Wagtail 页面呈现。您想要做的是仅使用 Go to Wagtail Admin 选项呈现用户栏(因为没有其他选项是相关的)。因此,您可以创建自己的模板标签并将其放在 wagtailuserbar
旁边的 base.html
中。您可以将其设置为在上下文中没有 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' %}
在派生自 Wagtail Page 模型的模板上,右下角有一个小 Wagtail icon/menu。这提供了一种快速编辑页面 and/or 跳转到 Wagtail Admin 的方法。但是,此菜单不会出现在不是派生自 Wagtail 页面模型的自定义视图模板上。
如何让 Wagtail 在我的前端模板上显示小菜单,以便页面具有一致的导航?
标准的 Wagtail 用户栏通过放置在您的模板中呈现:
{% load wagtailuserbar %}
{% wagtailuserbar 'top-left' %}
我通常只是将上面的内容放在 base.html
中。 'top-left'
指定,当然,告诉模板标记在哪里呈现用户栏。 Reference
但是,wagtailuserbar 只为 Wagtail 页面呈现。您想要做的是仅使用 Go to Wagtail Admin 选项呈现用户栏(因为没有其他选项是相关的)。因此,您可以创建自己的模板标签并将其放在 wagtailuserbar
旁边的 base.html
中。您可以将其设置为在上下文中没有 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' %}