{% load static %} 和 {% load staticfiles %}:哪个更好?

19
我不确定它们之间的区别,似乎两者都能正常工作。我在谷歌搜索了一下,看起来它们基本上是一样的东西。 只是出于好奇,人们在这个领域使用哪一个?
我读了那篇文章,但仍然不知道何时使用哪个版本以及这个领域中人们使用哪个版本。我的代码对它们都能够起作用。起初我以为它只加载静态文件夹,但它也能处理静态文件…

1
@dyeray 是的,我看过了,但仍然不知道何时使用哪个,并且领域内的人使用哪个。我的代码对两者都有效。起初我以为它只能加载静态文件夹,但它也适用于静态文件... - user5659156
2个回答

30

目前(Django 1.9及更早版本),{% load staticfiles %}会从contrib应用程序中加载static模板标签,该标签比内置的django.core.static功能更强大。

最重要的区别是staticfiles可以管理存储在CDN上的文件,因为它的解析器可以管理哈希值。 core.static只会将STATIC_URL附加到静态文件名中,这对于处理文件(例如添加md5哈希以清除发布之间的缓存)不足够。

这种差异是由于管理非本地存储文件并未专门包含在Django核心包中,但对许多开发人员仍然有用,因此被实现为官方的contrib包。因此,如果您开始使用staticfiles,则必须记住在模板中每次使用它。但是,可能会出现一些问题,例如当使用Media时,因此决定将这两个templatetags合并为一个,并根据开发人员是否在其INSTALLED_APPS中具有django.contrib.staticfiles来使用不同的行为。

Django 1.10及更高版本(还请参阅Django跟踪器中的票证)开始,{% load static %}将在内部如果激活(否则保持默认行为)使用staticfiles,并且contrib包中的templatetag将被弃用以避免混淆。

TL;DR

  • 在 Django 1.10 之前staticfiles 加载一个 templatetags,可以管理非本地存储,其中 static 无法(或不易)管理;
  • 从 Django 1.10 开始contrib.staticfiles 应用程序仍然存在,但其 templatetags 将被删除,只剩下 {% static %} templatetags;
  • 从 Django 2.0 开始(我相信): {% load staticfiles %} 被删除。

目前,如果您使用相关的 contrib 应用程序(并且知道为什么要使用它),请使用 staticfiles templatetags 直到 Django 1.10,否则只需使用 static


自2016年起,我们只需要使用{% load static %} - Uri
https://dev59.com/UGAf5IYBdhLWcg3w0Ve7 - Uri
@maxime-lorant:“{% load static %}”在启用后会在内部使用“staticfiles”(否则保持默认行为)。如何“激活”“staticfiles”呢? - hkhare

4

这个主题中有一个有趣的代码片段位于'django/contrib/staticfiles/templatetags/staticfiles.py'文件中:

import warnings

from django import template
from django.templatetags.static import (
    do_static as _do_static, static as _static,
)
from django.utils.deprecation import RemovedInDjango30Warning

register = template.Library()


def static(path):
    warnings.warn(
        'django.contrib.staticfiles.templatetags.static() is deprecated in '
        'favor of django.templatetags.static.static().',
        RemovedInDjango30Warning,
        stacklevel=2,
    )
    return _static(path)


@register.tag('static')
def do_static(parser, token):
    warnings.warn(
        '{% load staticfiles %} is deprecated in favor of {% load static %}.',
        RemovedInDjango30Warning,
    )
    return _do_static(parser, token)

所以我敢假设 {% load staticfiles %} 在 Django 3 发布后将被删除 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接