在 django admin 中设置 favicon

问题描述 投票:0回答:6

我需要为 django 管理界面设置一个图标。

最好在全局范围内执行此操作,而不覆盖所有应用程序的模板。

最干净的方法是什么?我尝试在 Django 文档中搜索此内容,但一无所获。

django templates django-admin admin favicon
6个回答
27
投票

为了避免重复原始文件的任何内容,您实际上可以在扩展模板时覆盖模板(docs)。因此,创建您自己的

template/admin/base_site.html

{% extends "admin/base_site.html" %}
{% load static %}
{% block extrahead %}
    <link rel="shortcut icon" href="{% static 'yourapp/img/favicon.ico' %}" />
{% endblock %}

26
投票

如果图标位于

/app/static/img/favicon.ico
中,请将其链接到此文件的
{% block extrahead %}
/app/templates/admin/base_site.html

    {% extends "admin/base.html" %}

    {% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

    {% block extrahead %}
        <link rel="icon" href="{{STATIC_URL}}img/favicon.ico" sizes="48x48" />
    {% endblock %}
    {% block branding %}
        <h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
    {% endblock %}

settings.py
中,
INSTALLED_APPS
确保您的应用程序列在
django.contrib.admin
之前。

要通过删除

.pyc
文件来测试摆脱模板缓存:

$ find . -name \"*.pyc\" -delete".

适用于 Django 1.8.12 Firefox、Chrome。


9
投票

admin/base.html
模板中扩展
template/admin/base_site.html
并在 extrahead 块中添加网站图标链接

{% extends "admin/base.html" %}
{% load staticfiles %}
...
{% block extrahead %}
    <link rel="shortcut icon" href="{% static 'relative/path/to/favicon.ico' %}" />
{% endblock %}

Django 版本 >= 2

请注意,如果使用 Django 2 或更高版本,正确的导入是:

{% load static %}`

5
投票

覆盖 Django base.html 模板并将其放在 admin 目录下,如

my_app/templates/admin/base.html.

{% block extrahead %}
添加到覆盖模板。

   {% extends 'admin/base.html' %}
    {% load staticfiles %}
    {% block javascripts %}
        {{ block.super }}
    <script type="text/javascript" src="{% static 'app/js/action.js' %}"></script>

    {% endblock %}

    {% block extrahead %}
        <link rel="shortcut icon" href="{% static 'app/img/favicon.ico'  %}" />
    {% endblock %}
    {% block stylesheets %}

        {{ block.super }}
    {% endblock %}

1
投票

我找到的最好方法是放入网址:

    from django.shortcuts import redirect
    urlpatterns = [
        path('favicon.ico', lambda _ : redirect('static/icons/favicon.ico', permanent=True)),
    ]

这样,您在所有页面中都有一个图标,其中包括管理员和 django 休息框架(我测试了两者),并且在模板中使用 link 标记设置了图标,保持工作状态。


0
投票

您可以为 Django Admin 设置 favicon

例如,将

favicon.ico
放入
static/
中,然后将django/contrib/admin/templates/admin/base.html中的
base.html
复制到
templates/admin/
,如下所示:

django-project
 |-core
 |  └-settings.py
 |-my_app1
 |-my_app2
 |-static
 |  └-favicon.ico # Here
 └-templates
    └-admin
       └-base.html # Here

然后,在

TEMPLATES
中将 BASE_DIR / 'templates' 设置为 DIRS,并在
STATICFILES_DIRS
中设置 BASE_DIR / 'static/',如下所示,以便 Django 可以识别
templates
下的
static
django-project
文件夹。 *我的答案解释了如何设置Django模板,我建议在我的答案之后设置whitenoise以禁用浏览器缓存Django的静态文件:

# "settings.py"

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            BASE_DIR / 'templates' # Here
        ],
        ...
    },
]

...

STATIC_URL = 'static/'
STATICFILES_DIRS = [
    BASE_DIR / 'static/' # Here
]

最后在

<link rel="icon" ...>
中添加
base.html
,如下图:

{# "base.html" #}

<head>
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}">
{# ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ Here ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ #}
<link rel="icon" href="{% static 'favicon.ico' %}"/>
{# ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ Here ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ #}
{% block dark-mode-vars %}
  <link rel="stylesheet" href="{% static "admin/css/dark_mode.css" %}">
  <script src="{% static "admin/js/theme.js" %}" defer></script>
{% endblock %}

此外,如果您的浏览器上未显示 favicon,请使用不同的网址,如下所示。 *我的回答解释了它:

http://localhost:8000/...
http://localhost:8001/...
http://localhost:8002/...
http://localhost: :: /...

http://127.0.0.1:8000/...
http://127.0.0.1:8001/...
http://127.0.0.1:8002/...
http://127.0.0.1: :: /...
© www.soinside.com 2019 - 2024. All rights reserved.