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

时间:2014-06-16 07:24:22

标签: django django-templates

问题中最重要的部分是主题。

我想知道哪种标签最适合哪种情况。此外...我找到了代码,它还在模板中使用了settings.STATIC_URL中包含的{{STATIC_URL}}

我有点困惑。

5 个答案:

答案 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会选择TypeErrorCannot 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!" />

希望有所帮助!!