{%load staticfiles%}と{%load static%}の違いは何ですか


92

質問の最も重要な部分はトピックです。

どのタグがどの場合に最適かと思います。さらに...私もコードを見つけましsettings.STATIC_URLた。{{STATIC_URL}}テンプレートにている。

少し混乱しています。


すべてに対してSTATIC_URLを使用するだけで、問題なく動作するようです
Maximas

1
@Maximas動作しますが、ベストプラクティスではないようです
KhoPhi

1
これらの答えはどれも良いものではありません。これはより最近の完全な答えです。
Jarad 2017年

回答:


60

組み込みのstaticテンプレートタグ「に保存されている静的ファイルへのリンクSTATIC_ROOT」。

staticfilescontribのアプリケーションのstaticテンプレートタグは、「構成された使用していますSTATICFILES_STORAGE「ファイルを展開する非ローカルストレージバックエンドを使用する場合に特に便利」で、指定した相対パスの完全なURLを作成するためにストレージを」。

組み込みstaticテンプレートタグのドキュメント(上記にリンク)には、「クラウドサービスを使用して静的ファイルを提供するなどの高度なユースケースがある場合」にstaticfilescontribアプリのstaticテンプレートタグを使用するように記載されており、次の例が示されていますそうする:

{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

あなたは使うことができ{% load staticfiles %}なく、{% load static from staticfiles %}あなたがしたい場合は、後者はより明示的です。


30
Django V1.10はだけを推奨し{% load static %}ます。「以前のバージョンでは{% load static from staticfiles %}、STATICFILES_STORAGEで定義されたストレージからファイルを提供するためにテンプレートで使用する必要がありました。これは不要になりました。」
John C

1
2016年以降、使用する必要があるのはだけです{% load static %}
スピーディマッチ

5

どのような違いがあるのか​​はわかりませんが、ユースケースの違いを見つけました(Apache、Python 3.4のwsgiを介して実行されるdjango 1.9.1を使用)。私のアプリでImageFieldsは、データベースにいくつかの画像があります。テンプレートでこのようなコードを使用する場合:

<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>

次に、私がを使用すると{% load static %}、djangoはTypeErrorCannot mix str and non-str arguments)をスローします。これはおそらく、object.imageが文字列ではないためです。これはImageField、後の段階で文字列に変換されるです。ただし、使用する場合{% load staticfiles %}ない、そのようなエラーは発生ません。

残念ながら、問題のデバッグに何時間も費やした結果、この違いを発見しました。最初のオプションを使用するときの回避策を見つけることができました。つまり、次のようにオブジェクトに文字列コンバーターメソッドを追加しました。

#image string
def image_str(self):
    return str(self.image)

この知識が誰かに役立つことを願っています。



1

わかりやすい説明があるdocsを参照してください。実際、{% static %}テンプレートタグはSTATICFILE_STORAGEの場所を知っています

ドキュメントが言うように:

 {% load static from staticfiles %} <img src="{% static "images/hi.jpg"
 %}" alt="Hi!" /> The previous example is equal to calling the url method of an instance of STATICFILES_STORAGE with "images/hi.jpg".

これは、クラウドサービスまたはCDNからの静的ファイルの提供で説明されているように、非ローカルストレージバックエンドを使用してファイルをデプロイする場合に特に便利です。

静的URLを表示せずに取得する場合は、少し異なる呼び出しを使用できます。

{% load static from staticfiles %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}" alt="Hi!" />

それが役に立てば幸い!!


17
私はまだ私が使用する必要があるときに知っていない{% load static %}{% load staticfiles %}{{STATIC_URL}}...と私は違いが何であるかを知らない知っている{% load static %}{% load static from staticfiles %}
trikoder_beta

1
ドキュメントから一連の行をコピーするだけでは効果がありません
Hasan Iqbal 2017年

1

{% load staticfiles %} S3などのさまざまなストレージを使用している場合に非常に役立ちます。S3のURLに変換されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.