【问题标题】:How to server favicon.ico with Django and Whitenoise如何使用 Django 和 Whitenoise 为 favicon.ico 提供服务器
【发布时间】:2021-05-01 18:17:42
【问题描述】:

我将whitenoise 用于静态文件,它工作正常。

但是我怎样才能提供/favicon.ico 文件呢?

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

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

【问题讨论】:

    标签: django whitenoise


    【解决方案1】:

    如果您希望这些文件由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 命令填充。
    【解决方案2】:

    我有一个 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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-02-26
        • 2017-12-20
        • 2018-02-22
        • 2020-07-22
        • 1970-01-01
        • 1970-01-01
        • 2020-08-18
        • 2021-06-16
        • 2019-07-04
        相关资源
        最近更新 更多