首页 > 解决方案 > Wagtail:是否可以自定义“wagtailadmin/home.html”?

问题描述

我有一个迷你应用程序,其中一种类型的用户只有对 wagtail 管理界面的查看访问/权限。这些用户可以检查我注册的模型modeladmin。现在,如果这样的用户登录,他们会看到一个空白页面(除了菜单),即他们没有最后的活动等。有道理,因为他们没有管理员权限。但我想避免一个空页面并向他们显示一些自定义 html。

我知道wagtail_hooks.py通过设置[inspect | index]_template_name属性来注册自定义检查/索引视图模板,但这是在模型级别。

是否可以使用自定义模板替换wagtailadmin/home.html

编辑

文档显示了编辑管理区域某些部分的方法,例如品牌或欢迎信息。但不是主要内容。

编辑 2

以@gasmans 的回答为基础。如果您需要请求对象,您可以创建一个这样的面板

# wagtail_hooks.py
class WelcomePanel:
    order = 50

    def __init__(self, request):
        self.request = request
        self.logged_in_user = request.user.username

    def render(self):
        return render_to_string('wagtailadmin/home/my_message.html', {
            'logged_in_user': self.logged_in_user,
        }, request=self.request)

# simply pass the 'request' to the panel
@hooks.register('construct_homepage_panels')
def add_another_welcome_panel(request, panels):
    panels.append(WelcomePanel(request))

标签: pythonwagtail

解决方案


我得到了它。

创建一个模板文件dashboard/templates/wagtailadmin/home.html并从 Wagtails 源模板中复制所有 html。然后添加您自己的内容。

{% extends "wagtailadmin/home.html" %}
{% load wagtailadmin_tags i18n %}
{% block titletag %}{% trans "Dashboard" %}{% endblock %}
{% block bodyclass %}homepage{% endblock %}

{% block content %}
<header class="merged nice-padding">
    <div class="row row-flush">
        <div class="col1">
            <div class="avatar"><img src="{% avatar_url user %}" alt="" /></div>
        </div>
        <div class="col9">
            <h1>{% block branding_welcome %}{% blocktrans %}Welcome to the {{ site_name }} Wagtail CMS{% endblocktrans %}{% endblock %}</h1>
            <div class="user-name">{{ user.get_full_name|default:user.get_username }}</div>
        </div>
    </div>
</header>

{% if panels %}
    {% for panel in panels %}
        {{ panel.render }}
    {% endfor %}
{% else %}
    <p>{% trans "This is your dashboard on which helpful information about content you've created will be displayed." %}</p>
{% endif %}

<!-- Here comes the custom code  -->
<h1>Custom content</h1>

{% endblock %}

推荐阅读