如何将 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' %}