{% 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:)