【发布时间】:2021-05-01 18:17:42
【问题描述】:
我将whitenoise 用于静态文件,它工作正常。
但是我怎样才能提供/favicon.ico 文件呢?
有一个设置叫WHITENOISE_ROOT,但是我不明白怎么用。
我想保持我的 nginx 配置简单并通过 gunicorn 提供所有文件
【问题讨论】:
标签: django whitenoise
我将whitenoise 用于静态文件,它工作正常。
但是我怎样才能提供/favicon.ico 文件呢?
有一个设置叫WHITENOISE_ROOT,但是我不明白怎么用。
我想保持我的 nginx 配置简单并通过 gunicorn 提供所有文件
【问题讨论】:
标签: django whitenoise
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/ 中的所有文件。
【讨论】:
STATIC_ROOT 中添加任何文件,因为该文件夹将由collectstatic 命令填充。
我有一个 django 应用程序,它使用 Whitenoise(托管在 Heroku 上)并从与我的静态文件不同的文件夹中提供我的网站图标。
在路径BASE_DIR/root_files处创建一个文件夹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))
【讨论】: