问题描述
我对静态文件使用 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))