Django Admin.更改应用页面标题

pgpifvop  于 2023-05-01  发布在  Go
关注(0)|答案(3)|浏览(307)

每个应用程序页面的默认标题为:
verbose_name + "administration"
我怎么能改变它?

ktecyv1j

ktecyv1j1#

不幸的是,目前Django并没有提供一个干净的方法来覆盖这个头文本,因为它是硬编码在django.contrib.admin.sites.AdminSite.app_index方法中的。
但是,如果您确实需要这样做,您可以覆盖这个方法,并用您的文本替换默认标题。
如果您还没有使用AdminSite,则需要使用自己的自定义AdminSite。所以,你需要修改你的urls.py指向你的自定义类,而不是默认的django管理员url,你还需要在你的类中注册你的模型,而不是默认的站点。
类MyAdminSite(admin.管理站点):

def app_index(self, request, app_label, extra_context=None):
    response: TemplateResponse = super().app_index(request, app_label, extra_context)
    response.context_data['title'] = 'Your header goes here;
    return response

一定要检查原始的方法代码,因为它在不同的Django版本中可能会有所不同。上面提供的代码适用于Django 3。2.3.

bvjxkvbb

bvjxkvbb2#

你可以考虑在你的admin.py中使用:

admin.site.site_title = "My DEBUG Panel"

或者类似地,对于类似于admin.pysettings.py中的报头:

ADMIN_SITE_HEADER = "My DEBUG Panel"
3okqufwl

3okqufwl3#

正如Pavel所指出的,覆盖标题文本很复杂,因为它是硬编码的。
但是,使用javascript很容易解决这个问题。
首先,将以下内容添加到templates/admin/base_site.html中:

{% block content_title %}{% if title %}<h1 id='adminTitle'>{{ title }}</h1>{% endif %}{% endblock %}

请注意H1标记中的id='adminTitle'
然后,在</h1>{% endif %}之间添加javascript,结果:

{% block content_title %}{% if title %}<h1 id='adminTitle'>{{ title }}</h1><script>

if (adminTitle.innerHTML == 'MyApp administration')
  adminTitle.innerHTML = 'My New Title'

</script>{% endif %}{% endblock %}

显然,你可以编写更复杂的javascript来替换标题的部分内容。

相关问题