问题中最重要的部分是主题。
我想知道哪种标签最适合哪种情况。而且...我发现了代码,这些代码也settings.STATIC_URL
包含{{STATIC_URL}}
在模板中。
我有点困惑。
问题中最重要的部分是主题。
我想知道哪种标签最适合哪种情况。而且...我发现了代码,这些代码也settings.STATIC_URL
包含{{STATIC_URL}}
在模板中。
我有点困惑。
Answers:
内置static
模板标签 “链接到保存在中的静态文件STATIC_ROOT
”。
该staticfiles
的contrib应用程序的static
模板标签 “使用配置的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 %}
,但是后者更为明确。
{% load static %}
。“在旧版本中,必须使用{% load static from staticfiles %}
模板来提供STATICFILES_STORAGE中定义的存储中的文件。这不再是必需的。”
{% load static %}
。
我不知道应该有什么区别,但是我发现了用例的区别(使用通过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则抛出一个TypeError
(Cannot mix str and non-str arguments
)。据推测,这是因为object.image
不是字符串,而是一个ImageField
,稍后会转换为字符串。但是,如果{% load staticfiles %}
不使用,则不会发生此类错误。
不幸的是,在花费数小时尝试调试问题后,我发现了这种差异。我设法找到一种使用第一个选项的解决方法,即向这样的对象添加一个字符串转换器方法:
#image string
def image_str(self):
return str(self.image)
希望这些知识对某人有用。
Django文档现在更喜欢{% load static %}
。
{% load staticfiles %}
可行,但我认为它已被弃用。
https://docs.djangoproject.com/zh-CN/dev/ref/templates/builtins/#static
参考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!" />
希望有帮助!!
{% load static %}
,{% load staticfiles %}
,{{STATIC_URL}}
...,知道我不知道是什么样的区别{% load static %}
和{% load static from staticfiles %}