Django 1.8 - 静态文件如何神奇地猜测散列文件名

时间:2015-09-09 15:56:22

标签: django amazon-s3

我将我的静态文件存储在Amazon S3上,并且我使用Django的缓存清理,我的存储类看起来像这样:

class MyStaticFilesStorage(ManifestFilesMixin, S3BotoStorage):
    ...

请参阅: https://docs.djangoproject.com/en/1.8/ref/contrib/staticfiles/#manifeststaticfilesstorage

运行manage.py collectstatic后,所有静态文件都上传到S3,并在文件名中使用缓存清除哈希值。

一切都很好,但我无法理解。

  • 我的static文件夹位于.gitignore,因此静态文件永远不会到达我的服务器。
  • django创建的staticfiles.json仅存储在S3上,所以我去了那里并将其删除(所以我可以看看它是否有任何效果)。
  • 我可以ssh到服务器并验证没有名为staticfiles.json的文件,并且没有静态文件在服务器上。

但是,Django仍然在服务器上生成具有正确哈希的正确静态URL(例如:main.c076b26cc1a7.css)。

如何? django如何在没有映射(staticfiles.json)且没有原始文件的情况下知道哈希值?

1 个答案:

答案 0 :(得分:1)

我猜测Django首先从S3获取 staticfiles.json 文件,然后从文件中读取映射。

即使您的静态文件夹位于 .gitignore ,当您运行manage.py collectstatic时,您告诉Django查看静态文件夹,因此它知道它必须从那里。不要忘记您没有使用git pull上传静态文件夹中的内容,而是使用manage.py collectsatic进行上传。