2014-06-16 213 views
50

问题的最重要部分在于主题。{%load staticfiles%}和{%load static%}之间有什么区别

我在想什么标签最适合哪种情况。此外...我发现代码,也使用{{STATIC_URL}}在模板中包含settings.STATIC_URL

我有点困惑。

+0

我只是用STATIC_URL的一切,这似乎为我 – Maximas

+1

@Maximas它的工作做工精细,但我想这不是最好的做法 – Rexford

+0

这些答案都不是很好。这是[更近期的完整答案](https://stackoverflow.com/a/34424007/1577947)。 – Jarad

回答

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。

如果您想获取静态URL而不显示它,你可以使用 一个稍微不同的呼叫:

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

希望帮助!

+13

我仍然不知道什么时候应该使用'{%load static%}','{%load staticfiles%}','{{STATIC_URL}}'...并且知道我不知道有什么区别在'{%load static%}'和'{%load static from staticfiles%}' –

+0

之间简单地从文档复制一堆行并没有真正帮助 –

41

The built-in static template tag“链接到保存在STATIC_ROOT中的静态文件”。

The staticfiles contrib app's static template tag“使用配置的STATICFILES_STORAGE存储为给定的相对路径创建完整的URL”,这在使用非本地存储后端部署文件时特别有用。

内置static模板标签的文档(与上文)有一张纸条,上面写着使用staticfiles的contrib应用程序的static模板标签“如果你有一个先进的使用情况下,如使用云服务来提供静态文件” ,并让这样做的这个例子:

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

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

+14

[Django V1.10](https://docs.djangoproject .com/en/1.10/ref/templates/builtins /#static)现在只推荐'{%load static%}'。 “在旧版本中,您必须使用模板中的{%load static from staticfiles%}来为STATICFILES_STORAGE中定义的存储提供文件,这已不再需要。” –

3

我不知道区别应该是什么,但是我发现了一个用例差异(使用通过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不是字符串,而是ImageField,它在稍后阶段转换为字符串。但是,如果使用{% load staticfiles %}则不会发生此类错误。

不幸的是,我花了数小时试图调试问题后发现了这种差异。我设法找到使用第一个选项时,即一个字符串转换方法添加到这样的对象变通方法:

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

希望这方面的知识将是使用的人的。

1

{% load staticfiles %}是非常有用的,当您使用不同的存储像S3,然后它会转换成S3网址

相关问题