问题中最重要的部分是主题。
我想知道哪种标签最适合哪种情况。此外...我找到了代码,它还在模板中使用了settings.STATIC_URL
中包含的{{STATIC_URL}}
。
我有点困惑。
答案 0 :(得分:56)
The built-in static
template tag"将[s]链接到STATIC_ROOT
"中保存的静态文件。
The staticfiles
contrib app's static
template tag"使用已配置的STATICFILES_STORAGE
存储空间为给定的相对路径"创建完整的网址,这是"在使用非本地存储时尤其有用后端部署文件"。
内置的static
模板标记文档(与上面相关联)中有一条说明,即使用staticfiles
contrib应用的static
模板标记"如果您有一个高级用例,例如使用云服务来提供静态文件",它就是这样做的例子:
{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
如果需要,您可以使用{% load staticfiles %}
而不是{% load static from staticfiles %}
,但后者更明确。
答案 1 :(得分:5)
我不知道应该是什么区别,但我发现了一个用例差异(使用django 1.9.1通过apache运行,wsgi运行在Python 3.4上)。在我的应用程序中,我在数据库中的ImageFields
中有一些图像。如果我在我的模板中使用这样的代码:
<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>
然后,如果我使用{% load static %}
,django会选择TypeError
(Cannot mix str and non-str arguments
)。这可能是因为object.image
不是字符串,它是ImageField
,在稍后阶段会转换为字符串。但是,如果使用{% load staticfiles %}
,则不会发生此类错误。
不幸的是,我花了好几个小时试图调试问题后发现了这种差异。我设法找到了使用第一个选项时的解决方法,即向对象添加字符串转换器方法,如下所示:
#image string
def image_str(self):
return str(self.image)
希望这些知识对某人有用。
答案 2 :(得分:2)
Django文档现在更喜欢{% load static %}
。
{% load staticfiles %}
有效,但我认为它已被弃用。
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
答案 3 :(得分:1)
{% load staticfiles %}
在使用S3等不同存储空间时非常有用,然后它会转换为S3网址
答案 4 :(得分:0)
请参阅docs,其中有一个很好的解释。
实际上,{% 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。
如果您想要在不显示的情况下检索静态网址,则可以 使用略有不同的电话:
{% load static from staticfiles %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}" alt="Hi!" />
希望有所帮助!!