【问题标题】:django: how to load the static files with hash/md5 appending correctly?django:如何正确加载带有 hash/md5 附加的静态文件?
【发布时间】:2020-11-04 04:39:26
【问题描述】:

使用 Django 3

我遵循了 Django 文档 https://docs.djangoproject.com/en/3.0/ref/contrib/staticfiles/#manifeststaticfilesstorage 导出带有哈希附加的静态文件。


settings.py 生产

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

static_root 文件夹(输出)

 static_root/
          staticfiles.json
 static_root/css/
               project_styles.87c2920e7bc3.css
               project_styles.css

一切都正确收集。


之后,我将所有内容上传到我的 apache 静态服务器。 我开始/评论STATICFILES_STORAGE。这就是我对Doc的理解?如果我在生产中保留此设置,我会收到 500 Error

settings.py 生产

# STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

在生产中重新启动我的 Django 应用程序后,我的网站仍在我的浏览器中加载 project_styles.css 但不是哈希版本 project_styles.87c2920e7bc3.css。即使我删除project_styles.css Django 也不会提供哈希版本。

问题


我是否错过了生产模式下settings.py 中的一些设置? 在文档中,他们提到要设置STATICFILES_STORAGE = django.contrib.staticfiles.storage.StaticFilesStorage,但没有区别。正如它所提到的,它仅用于测试。

我必须做些什么才能在生产中加载正确的静态哈希版本?我是否必须在我的模板中设置一些东西,以便 django 将查看 json 文件以获取正确的哈希版本?还是我必须命名哈希文件?

【问题讨论】:

    标签: django django-templates django-staticfiles django-static


    【解决方案1】:

    好的,问题是我想要两个不同的 STATIC_ROOT 路径。一个用于开发,一个用于生产,因为我希望我的所有开发内容都在一个项目文件夹中。因为如果你 collectstatic 使用你的 Apache 服务器的 STATIC_ROOT,django 会将它导出到 c:/var/www/your/server/static 而我想要它到 c:/webprojects/myproject_1/static_root_exports 然后分别将这些文件上传到我的服务器上。

    所以我根据我的 django-environ 文件中的DEV_STATIC off / on 设置了两个不同的路径。 Django 将设置正确的路径。

    .env

    DEBUG=off
    # --- applies media server & sets MEDIA_ROOT & STATIC_ROOT
    DEV_STATIC=on
    
    <...>
    
    STATIC_ROOT_DEV=static_root_exports
    STATIC_ROOT_PROD=/var/www/myUserName/html/myproject_assets/static
    
    <...>
    

    setting.py

    # -- Set for Hash
    STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
    # --- STATIC_ROOT
    if DEV_STATIC == True:
        STATIC_ROOT = SERVER_DIR.joinpath(env('STATIC_ROOT_DEV'))
    else:
        STATIC_ROOT = env('STATIC_ROOT_PROD')
    

    【讨论】:

    • 稍微观察一下,但您应该为 prod 和 dev 提供不同的 .env 文件,因此您不必为 settings.py 中的每个设置编写 if。您只需在每个 env 文件中添加 STATIC_ROOT 并将其加载到设置中,而无需任何 if
    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多