web-dev-qa-db-ja.com

{%load static%}および{%load staticfiles%}:どちらが望ましいですか?

違いはわかりませんが、どちらも機能しているようです。私はグーグルで回ったが、それらはほとんど同じもののようだ。好奇心から、人々はフィールドでどれを使用しますか?

私はそれを読みましたが、いつどのを使用するのか、そして現場のどの人が使用するのかまだわかりません。鉱山はそれらの両方のために働きます。最初は静的フォルダをロードしていると思いましたが、静的ファイルでも機能します... –

14
user5659156

現時点(Django 1.9以前)では、{% load staticfiles %}は、組み込みのDjango.core.staticよりも多くの機能を備えたcontribアプリからstaticテンプレートタグを読み込みます。

最も重要な違いは、staticfilesがCDNに保存されているファイルを管理できることです。これは、そのリゾルバーがハッシュなどを管理できるためです。 core.staticは、静的ファイル名にSTATIC_URLを追加するだけです。これは、ファイルを処理している場合は十分ではありません(たとえば、リリース間でキャッシュをクリアするためにmd5ハッシュを追加します)

この違いは、非ローカルストレージファイルの管理がDjangoのコアパッケージに含まれることに専念していなかったという事実によるものですが、公式のcontribパッケージとして実装される多くの開発者にとっては依然として有用でした。したがって、staticfilesを使い始めた場合は、テンプレート内ですべて使用することを忘れないでください。ただし、たとえば Mediaクラスを使用 の場合、いくつかの問題が発生する可能性があります。そのため、開発者がDjango.contrib.staticfilesINSTALLED_APPSを持っているかどうかに関係なく、これら2つのテンプレートタグを1つにマージし、異なる動作を使用することにしました。か否か。

Django 1.10以降 (また Djangoトラッカー のチケットを参照))から、{% load static %}は内部でstaticfilesを使用しますアクティブ化された場合(通常はデフォルトの動作を維持します)、混乱を避けるためにcontribパッケージのtemplatetagは非推奨になります。

TL; DR

  • Before Django 1.10staticfilesは、非ローカルストレージを管理できるテンプレートタグをロードします。ここでstaticできません(または簡単ではありません);
  • From Django 1.10contrib.staticfilesアプリはまだ存在しますが、そのテンプレートタグは削除されます{% static %}テンプレートタグのみが残ります;
  • From Django 2.0(私は信じています):{% load staticfiles %}は削除されました。

今のところ、関連するcontribアプリを使用する場合(そしてそれを使用する理由がわかっている場合)はDjango 1.10まで)staticfiles templatetagsを使用し、それ以外の場合はstaticを使用します。 。

25
Maxime Lorant

このトピックに関する「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リリース:)の後に削除されると思い込んでください。

2
shallvie