{%load static%}和{%load staticfiles%}:哪个更受欢迎?

时间:2015-12-22 19:19:12

标签: django django-templates django-staticfiles django-static

我不确定区别是什么,似乎两者都有效。我用Google搜索,似乎它们几乎是一样的。 只是出于好奇,人们在现场使用哪一个?

我读过但仍然不知道何时使用哪个,以及该领域的哪个人使用。我的工作都适合他们。起初我以为它正在加载静态文件夹,但它也适用于静态文件... -

2 个答案:

答案 0 :(得分:23)

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

最重要的区别是staticfiles可以管理存储在CDN上的文件,因为它的解析器可以管理哈希值。 core.static仅将STATIC_URL附加到静态文件名,如果您正在处理文件,这还不够(例如,添加md5哈希以清除版本之间的缓存)

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

Django 1.10 and onwards(也是see ticket in Django tracker)开始,{% load static %}将在内部使用staticfiles ,如果已激活(oherwise保持默认行为),并且不推荐使用contrib包中的templatetag以避免混淆。

<强> TL; DR

  • 在Django 1.10之前staticfiles加载一个模板标签,可以管理static无法(或不容易)的非本地存储;
  • 来自Django 1.10 contrib.staticfiles应用仍然存在但其模板标签只会被移除{% static %}模板标签;
  • 来自Django 2.0 (我相信):{% load staticfiles %}已删除。

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

答案 1 :(得分:2)

关于此主题的'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)

在django 3发行后,我不敢假设{%load staticfiles%}将被删除:)