Django的CachedStaticFilesStorage未对文件URL进行哈希处理

14 投票
2 回答
3089 浏览
提问于 2025-04-17 20:31

我想给我的一些JavaScript和CSS文件启用版本控制,因为在网站上工作时遇到了缓存问题。我了解到Django 1.6中的CachedStaticFilesStorage,感觉这个功能很合适。于是我把settings.py修改成了以下设置:

STATIC_ROOT = 'staticfiles'

STATIC_URL = ''

# Additional locations of static files
STATICFILES_DIRS = (
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

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

作为测试,我重写了最有问题的CSS标签,想看看它是否会开始对文件路径进行哈希处理。结果每次我尝试加载页面时,都出现了500错误。

你们觉得我哪里出错了?我是不是漏掉了什么步骤?

模板中的条目:

{% block cssfiles %}
{% load static%}
<link href="{% static "/static/css/mapmaker.css" %}" media="screen">
{% endblock %}

2 个回答

2

在Django 1.10版本中,这个问题已经解决了,具体可以在文档中找到说明:

在旧版本中,你还需要在模板中使用 {% load static from staticfiles %}。现在,如果安装了django.contrib.staticfiles,静态模板标签({% load static %})会自动使用它。

13

这真是个棘手的问题……如果你仔细阅读文档,你会了解到:

……在你的模板中使用 staticfiles static 模板标签来引用你的静态文件……

所以,不要这样做:

{% load static %}

而是使用:

{% load staticfiles %}

撰写回答