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


92

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

我想知道哪种标签最适合哪种情况。而且...我发现了代码,这些代码也settings.STATIC_URL包含{{STATIC_URL}}在模板中。

我有点困惑。


我只是对所有内容都使用STATIC_URL,对我来说似乎很好用
Maximas 2014年

1
@Maximas它确实有效,但是我想它不是最佳实践
KhoPhi 2015年

1
这些答案都不好。这是一个更新的完整答案
亚拉德(Jarad)

Answers:


60

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

staticfiles的contrib应用程序的static模板标签 “使用配置的STATICFILES_STORAGE存储来为给定的相对路径的完整URL”,“使用非本地存储后端部署文件时特别有用”,这是。

内置static模板标签的文档(链接到上面)有一条注释,指出“如果您有高级用例(例如,使用云服务来提供静态文件),请使用staticfilescontrib应用程序的static模板标签”,并给出了以下示例这样做:

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

可以使用{% load staticfiles %}而不是使用{% load static from staticfiles %},但是后者更为明确。


30
Django V1.10现在建议使用{% load static %}。“在旧版本中,必须使用{% load static from staticfiles %}模板来提供STATICFILES_STORAGE中定义的存储中的文件。这不再是必需的。”
约翰·C

1
从2016年开始,我们只需要使用{% load static %}
乌里(Uri)

5

我不知道应该有什么区别,但是我发现了用例的区别(使用通过apache在python 3.4上通过wsgi运行的django 1.9.1)。在我的应用中,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)

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



1

参考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!" />

希望有帮助!!


17
我仍然不知道什么时候应该使用{% load static %}{% load staticfiles %}{{STATIC_URL}}...,知道我不知道是什么样的区别{% load static %}{% load static from staticfiles %}
trikoder_beta

1
仅仅从文档中复制一堆代码并没有真正的帮助
Hasan Iqbal

1

{% load staticfiles %} 当您使用不同的存储设备(例如S3)时,这非常有帮助,然后它将转换为S3 URL

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.