9

Я не уверен, в чем разница, кажется, что они оба работают. Я googled вокруг, и кажется, что они почти такие же. просто из любопытства, которое люди делают в поле?{% load static%} и {% load staticfiles%}: что является предпочтительным?

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

+3

Возможный дубликат [В чем разница между {% load staticfiles%} и {% load static%}] (http://stackoverflow.com/questions/24238496/what-is-the-difference-between-load -staticfiles-and-load-static) – dyeray

+1

@dyeray Да, я прочитал это, но до сих пор не знаю, когда использовать, какой и какой человек используют в поле. мои работы для них обоих. сначала я думал, что загружает статическую папку, но она работает и для статических файлов ... –

ответ

18

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

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

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

Из Django 1.10 and onwards (также see ticket in Django tracker), то {% load static %} собирается использовать staticfiles внутри если активирован (oherwise сохранить поведение по умолчанию), и templatetag в пакете CONTRIB устареет, чтобы избежать путаницы.

TL; DR

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

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