{% load static %} и {% load staticfiles %}: что предпочтительнее?

Я не уверен, в чем разница, кажется, что они оба работают. Я гуглил вокруг, и кажется, что они в значительной степени одно и то же. просто из любопытства, какой человек использует в поле?

Я читал это, но все еще не знаю, когда использовать, какие и какие люди в поле используют. мой работает для них обоих. сначала я думал, что он загружает статическую папку, но она работает и для статических файлов... -

1 ответ

Решение

На данный момент (Django 1.9 и ранее), {% load staticfiles %} загружает static TemplateTag из приложения Contribute, который имеет больше возможностей, чем встроенный django.core.static,

Самое важное отличие staticfiles может управлять файлами, хранящимися в CDN, так как его преобразователь может, например, управлять хешами. core.static только добавить STATIC_URL к статическому имени файла, что недостаточно, если вы обрабатываете ваши файлы (например, добавление хеша md5 для очистки кэша между выпусками)

Это различие связано с тем, что управление файлами нелокального хранилища не было предназначено для включения в основной пакет Django, но все же было полезно для многих разработчиков, чтобы быть реализованным в качестве официального пакета contrib. Так что, если вы начали использовать staticfiles, вы должны были помнить, чтобы использовать его каждый в ваших шаблонах. НО, могут возникнуть некоторые проблемы, например при использовании Media классы, поэтому было принято решение объединить эти две метки-шаблоны в один и использовать другое поведение, если разработчик имеет django.contrib.staticfiles в его INSTALLED_APPS или нет.

Начиная с Django 1.10 и далее ( см. Также билет в трекере Django), {% load static %} собирается использовать staticfiles внутренне, если активирован (иначе сохраните поведение по умолчанию), и тег шаблона в пакете contrib будет исключен во избежание путаницы.

TL; DR

  • До Джанго 1.10: staticfiles загружает шаблоны тегов, которые могут управлять нелокальным хранилищем, где static не может (или не легко);
  • Из Джанго 1.10: contrib.staticfiles приложение все еще существует, но его шаблоны будут удалены только {% static %} шаблоны тегов остаются;
  • Из Джанго 2.0 (я считаю): {% load staticfiles %} устранен.

Пока используйте staticfiles templatetags, если вы используете соответствующее приложение contrib (и вы знаете, почему вы его используете) до Django 1.10, в противном случае просто используйте static,

Просто интересный фрагмент кода внутри '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:)

Другие вопросы по тегам