一尘不染

Django的collectstatic有什么意义?

django

这可能是一个愚蠢的问题,但这不是在我的脑海中点击。

在Django中,惯例是将特定于应用程序的所有静态文件(即css,js)放入名为static的文件夹中。所以结构看起来像这样:

mysite/
    manage.py
    mysite/ --> (settings.py, etc)
    myapp/ --> (models.py, views.py, etc)
        static/

mysite/settings.py我有:

STATIC_ROOT = 'staticfiles'

因此,当我运行命令时:

python manage.py collectstatic

它会staticfiles在根目录下创建一个文件夹(与相同的目录myapp/)

这有什么意义呢?它不只是创建我所有静态文件的副本吗?


阅读 491

收藏
2020-03-31

共1个答案

一尘不染

将来自多个应用程序的静态文件收集到一个路径中
那么,一个Django的项目可以使用多个应用程序,因此虽然你只有一个myapp,它实际上可能是myapp1myapp2

通过将它们从单个应用程序内部复制到单个文件夹中,你可以将前端Web服务器(例如nginx)指向该单个文件夹STATIC_ROOT并从单个位置提供静态文件,而不是将Web服务器配置为从多个路径提供静态文件。

带有ManifestStaticFilesStorage的永久URL
关于将MD5哈希附加到文件名以进行版本控制的说明:它不是默认行为的一部分collectstatic,因为settings.STATICFILES_STORAGE默认为StaticFilesStorage(不这样做)

例如,如果你将MD5哈希值设置为使用ManifestStaticFilesStorage,则该哈希值将开始播放,从而使该行为成为广告。

这种存储的目的是在某些页面仍引用那些文件的情况下继续提供这些旧文件,例如,因为它们是由你或第三方代理服务器缓存的。此外,如果你想将远期的Expires标头应用于已部署的文件,以加快后续页面访问的加载时间,这将非常有帮助。

2020-03-31