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

问题描述

我对静态文件使用 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管理这些文件

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

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

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

,

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

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

在 settings.py 中:

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

要查看真实代码示例,请查看 Mozilla's Bedrock repo。他们在 BASE/root_files 中有网站图标并在 settings.py

中配置 WHITENOISE_ROOT ,

您可以按照此 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))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...