{%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 TypeError
( Cannot 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