% 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?

django 中 STATICFILES_DIRS 的路径

Pythonanywhere 'staticfiles' 不是有效的标记库:找不到模板库静态文件

没有名为“django.contrib.staticfiles.templatetags”的模块

ERRORS: ?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT settin

错误:没有名为 staticfiles 的模块