1

我继承了一个 Django 应用程序,该应用程序在 s3 之上使用 Cloudfront 作为 CDN 来提供静态文件。目前,此应用程序在提供其静态文件时不使用版本控制。这真的很烦人,因为这意味着 Cloudfront 不会重新加载文件,直到它们在那里过期,人们有时会从他们的计算机缓存中加载旧文件。我可以通过添加版本控制来解决这两个问题——提供来自类似以下内容的文件:cloudfront_url/git_tag/static/*. 我的问题是:配置它的最佳方法是什么?我正在考虑只使用我当前签出的 git 标签,并git describe在 settings.py 中添加一个管道,在其中设置我的 STATIC_URL 以将当前签出的标签合并到 STATIC_URL 中。有没有更规范的方式来做到这一点?我不能成为第一个想要做这样的事情的 Django 用户。

4

1 回答 1

2

虽然我不熟悉与 Cloudfront 集成的步骤,但您可以使用 Django 的CachedFileStorage生成带有附加到文件名的 md5 哈希的资产。这提供了每当您修改文件时,您都会生成一个新的独特资产。

您需要做的就是设置

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

并运行manage.py collectstatic

这将在您collectstatic输出到 ( STATIC_ROOT) 的文件夹中创建资产。我想你从这里上传到 Cloudfront。您的STATIC_URL我想也指向 Cloudfront。

{% STATIC_URL %}/asset.extension在您的模板中,而不是像您使用的那样放置引用

{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

这会将资产适当地映射到正确的资产。

请参阅有关 CachedFileStorage 的文档以了解更多信息,但这是一个非常方便的东西,它已融入 Django 但默认情况下未打开。它完全符合您的要求,确保您始终提供新资产,而不是返回陈旧的 js、css 或图像。

于 2013-10-28T22:38:28.160 回答