{%load staticfiles%}和{%load static%}之间有什么区别

这个问题的最重要的部分是在这个话题。

我想知道哪种标签最适合哪种情况。 此外…我发现代码,也使用模板中{{STATIC_URL}}包含的{{STATIC_URL}}

我有点困惑。

内置的static模板标签 “链接到保存在STATIC_ROOT静态文件”。

staticfiles contrib应用程序的static模板标签 “使用configuration的STATICFILES_STORAGE存储为给定的相对path创build完整的URL”,这在使用非本地存储后端部署文件时特别有用。

内置的static模板标签的文档(链接到上面)有一个说明,使用staticfiles contrib应用程序的static模板标签“如果你有一个高级用例,如使用云服务来提供静态文件”,它给这样做的例子:

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

如果你愿意的话,你可以使用{% load staticfiles %}而不是{% load static from staticfiles %} ,但后者更明确。

我不知道应该有什么区别,但是我发现了一个用例差异(使用通过apache运行的django 1.9.1,在Python 3.4上运行的wsgi)。 在我的应用程序中,我在数据库中的ImageFields中有一些图像。 如果我在我的模板中使用这样的代码:

 <a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a> 

那么,如果我使用{% load static %} ,django thorws TypeErrorCannot mix str and non-str arguments )。 这大概是因为object.image不是一个string,它是一个ImageField ,在稍后的阶段被转换成一个string。 但是,如果使用{% load staticfiles %}不会发生此类错误。

不幸的是,我花了数小时试图debugging问题后发现了这种差异。 我设法为使用第一个选项find一种解决方法,即将string转换器方法添加到对象,如下所示:

 #image string def image_str(self): return str(self.image) 

希望这个知识对某个人有用。

请参阅文档 ,其中有一个很好的解释。 实际上, {% static %}模板标签知道STATICFILE_STORAGE的位置

正如文档所说:

  {% load static from staticfiles %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" /> The previous example is equal to calling the url method of an instance of STATICFILES_STORAGE with "images/hi.jpg". 

当使用非本地存储后端来部署文件时,这特别有用,如从云服务或CDN提供静态文件中所述。

如果您想要检索静态url而不显示静态url,则可以使用稍微不同的呼叫:

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

希望帮助!

{% load staticfiles %}当你使用不同的存储如S3时非常有用,那么它会转换成S3的URL