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