【问题标题】: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

标签: django django-templates


【解决方案1】:

我不知道应该有什么区别,但我发现了一个用例区别(使用通过 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 会抛出一个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" %}" alt="Hi!" />
        

        如果需要,您可以使用{% 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"
         %}" alt="Hi!" /> 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 }}" alt="Hi!" />
        

        希望有帮助!!

        【讨论】:

        • 我仍然不知道什么时候应该使用{% load static %}{% load staticfiles %}{{STATIC_URL}}...并且知道我不知道{% load static %}和@987654330之间有什么区别@
        • 只是从文档中复制一堆行并没有真正的帮助
        猜你喜欢
        • 2016-03-29
        • 1970-01-01
        • 2020-04-06
        • 2011-07-08
        • 2010-11-29
        • 2016-10-13
        • 2013-07-02
        • 2012-01-13
        相关资源
        最近更新 更多