% load staticfiles % 和 % load static % 有啥区别
Posted
技术标签:
【中文标题】% load staticfiles % 和 % load static % 有啥区别【英文标题】:What is the difference between % load staticfiles % and % load static %% load staticfiles % 和 % load static % 有什么区别 【发布时间】:2014-08-05 23:18:57 【问题描述】:问题最重要的部分是在主题中。
我想知道哪种标签最适合哪种情况。此外...我找到了代码,它也使用模板中的STATIC_URL
包含的settings.STATIC_URL
。
我有点困惑。
【问题讨论】:
我只是使用 STATIC_URL 来处理一切,它似乎对我来说很好用 @Maximas 它确实有效,但我想它不是最佳实践 这些答案都不好。这是more recent and complete answer。 【参考方案1】:我不知道应该有什么区别,但我发现了一个用例区别(使用通过 apache 运行的 django 1.9.1,Python 3.4 上的 wsgi)。在我的应用程序中,我在数据库中的ImageFields
中有一些图像。如果我在模板中使用这样的代码:
<a href="object-object.id"><img src="% static object.image %" ></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】:Django 文档现在更喜欢% load static %
。
% load staticfiles %
有效,但我认为它已被弃用。
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
【讨论】:
【参考方案3】:% load staticfiles %
在您使用 S3 等不同存储时非常有用,然后它将转换为 S3 URL
【讨论】:
【参考方案4】: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" %" />
如果需要,您可以使用% load staticfiles %
而不是% load static from staticfiles %
,但后者更明确。
【讨论】:
Django V1.10 现在只推荐% load static %
。 “在旧版本中,您必须在模板中使用 % load static from staticfiles %
来提供 STATICFILES_STORAGE 中定义的存储中的文件。这不再需要。”
从2016年开始我们只需要使用% load static %
。【参考方案5】:
参考docs,那里有一个很好的解释。
其实% static %
模板标签知道STATICFILE_STORAGE的位置
正如文档所说:
% load static from staticfiles % <img src="% static "images/hi.jpg" %" /> The previous example is equal to calling the url method of an instance of STATICFILES_STORAGE with "images/hi.jpg".
这在使用非本地存储后端时特别有用 按照 Serving static files from a cloud 中的说明部署文件 服务或 CDN。
如果您想检索静态 URL 而不显示它,您可以 使用稍微不同的调用:
% load static from staticfiles % % static "images/hi.jpg" as myphoto % <img src=" myphoto " />
希望有帮助!!
【讨论】:
我仍然不知道什么时候应该使用% load static %
、% load staticfiles %
、STATIC_URL
...并且知道我不知道% load static %
和@987654330之间有什么区别@
只是从文档中复制一堆行并没有真正的帮助以上是关于% load staticfiles % 和 % load static % 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
为啥我需要同时定义 STATIC_URL 和 STATICFILES_DIRS?
Pythonanywhere 'staticfiles' 不是有效的标记库:找不到模板库静态文件
没有名为“django.contrib.staticfiles.templatetags”的模块
ERRORS: ?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT settin