{% load static%} и {% load staticfiles%}: что предпочтительнее? - программирование
Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

Из Django 1.10 и далее (также см. билет в Django tracker), {% load static %} будет использовать staticfiles внутренне, если он активирован (иначе соблюдайте поведение по умолчанию), а templatetag в пакете contrib будет устаревать, чтобы избежать путаницы.

TL; DR

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

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

Ответ 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)

так что я не могу предположить, что {% load staticfiles%} будет удален после выпуска django 3 :)