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

fjaof16o  于 2023-10-21  发布在  Go
关注(0)|答案(3)|浏览(131)

我使用whitenoise处理静态文件,它工作得很好。
但我如何提供/favicon.ico文件?
有一个名为WHITENOISE_ROOT的设置,但我不知道如何使用它。
我想保持我的nginx配置简单,并通过gunicorn提供所有文件

4ngedf3f

4ngedf3f1#

如果您希望这些文件由collectstatic管理

让我们假设在运行collectstatic之后,favicon.ico文件最终被复制到STATIC_ROOT目录下的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/中的所有文件。

关于pathlib的更新(2022-10-04)

从现在开始,Django创建的默认settings.py使用pathlib。为了与它保持一致,可以用/操作符替换os.join调用,例如:

WHITENOISE_ROOT = STATIC_ROOT / 'root'
mbjcgjjk

mbjcgjjk2#

您可以按照此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.templatetags.static import static

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

lqfhib0f3#

我有一个django应用程序,它使用Whitenoise(托管在Heroku上),并从静态文件的单独文件夹中提供我的favicon。
在路径BASE_DIR/root_files处创建一个文件夹root_files
在settings.py:

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

对于现实生活中的代码示例checkout Mozilla's Bedrock repo。他们在BASE/root_files中有favicon,在settings.py中配置WHITENOISE_ROOT

相关问题