如何使用 Django 和 Whitenoise 服务器 favicon.ico

How to server favicon.ico with Django and Whitenoise

我对静态文件使用 whitenoise,它工作正常。

但是我如何提供 /favicon.ico 文件?

有个设置叫WHITENOISE_ROOT,但我不明白怎么用。

我想保持我的 nginx 配置简单,并通过 gunicorn 提供所有文件

如果您希望这些文件由 collectstatic

管理

假设在 运行 collectstatic 之后,您的 favicon.ico 文件最终被复制到 root 子目录中,该子目录位于您的 STATIC_ROOT 目录中。

然后,用:

WHITENOISE_ROOT = os.path.join(STATIC_ROOT, 'root')

Whitenoise 将在您的应用程序的根目录中为 STATIC_ROOT/root/ 中的所有文件提供服务。

在您的情况下,STATIC_ROOT/root/favicon.ico 将在 /favicon.ico 送达。

如果您不希望这些文件由 collectstatic

管理

您的 BASE_DIR 中可以有一个 root_staticfiles 文件夹,它仅包含您要在 / 上提供的静态文件。

WHITENOISE_ROOT = os.path.join(BASE_DIR, 'root_staticfiles')

在这种情况下,Whitenoise 将在您的应用程序的根目录中提供 BASE_DIR/root_staticfiles/ 中的所有文件。

我有一个使用 Whitenoise(托管在 Heroku 上)的 Django 应用程序,并从我的静态文件的单独文件夹中为我的网站图标提供服务。

在路径 BASE_DIR/root_files 上创建一个文件夹 root_files

在settings.py中:

WHITENOISE_ROOT = os.path.join(BASE_DIR, 'root_files')

查看真实代码示例 Mozilla's Bedrock repo. They have favicons in BASE/root_files and configure WHITENOISE_ROOT in settings.py

您可以按照此 answer by hanleyhansen 在基本模板中添加以下行(所有其他模板都使用):

<link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/>

或者您可以编写一个重定向视图,如 this answer by wim 稍作修改:

from django.views.generic.base import RedirectView
from django.conf.urls.static import static

re_path(r'^favicon\.ico$', RedirectView.as_view(url=static('favicon.ico'), permanent=True))