Der wichtigste Teil der Frage ist das Thema.
Ich frage mich, welches Tag für welchen Fall am besten geeignet ist. Außerdem ... Ich fand Code, dass auch die Verwendung settings.STATIC_URL
von eingeschlossen {{STATIC_URL}}
in den Vorlagen.
Ich bin ein bisschen verwirrt.
django
django-templates
trikoder_beta
quelle
quelle
Antworten:
Das integrierte
static
Vorlagen-Tag "Link [s] zu statischen Dateien, in denen gespeichert wirdSTATIC_ROOT
".Das Template-Tag der
staticfiles
Contrib-Appstatic
"verwendet den konfiguriertenSTATICFILES_STORAGE
Speicher, um die vollständige URL für den angegebenen relativen Pfad zu erstellen". Dies ist "besonders nützlich, wenn Sie ein nicht lokales Speicher-Backend zum Bereitstellen von Dateien verwenden".In
static
der Dokumentation des integrierten Vorlagen-Tags (oben verlinkt) ist ein Hinweis enthalten, der besagt, dass das Vorlagen-Tag derstaticfiles
Contrib-App verwendet werden soll,static
"wenn Sie einen erweiterten Anwendungsfall haben, z. B. die Verwendung eines Cloud-Dienstes zum Bereitstellen statischer Dateien", und dieses Beispiel enthält dabei:Sie könnten
{% load staticfiles %}
eher verwenden als{% load static from staticfiles %}
wenn Sie möchten, aber letzteres ist expliziter.quelle
{% load static %}
. "In älteren Versionen mussten Sie{% load static from staticfiles %}
in Ihrer Vorlage Dateien aus dem in STATICFILES_STORAGE definierten Speicher bereitstellen. Dies ist nicht mehr erforderlich."{% load static %}
.Ich weiß nicht, was der Unterschied sein soll, aber ich habe einen Anwendungsfallunterschied gefunden (mit django 1.9.1, das über Apache ausgeführt wird, wsgi unter Python 3.4). In meiner App befinden sich einige Bilder
ImageFields
in der Datenbank. Wenn ich in meiner Vorlage folgenden Code verwende:dann, wenn ich benutze
{% load static %}
, wirft django einTypeError
(Cannot mix str and non-str arguments
). Dies liegt vermutlich daran , dassobject.image
es sich nicht um eine Zeichenfolge handelt, sondern um eine Zeichenfolge, dieImageField
zu einem späteren Zeitpunkt in eine Zeichenfolge konvertiert wird. Wenn man jedoch{% load staticfiles %}
keinen solchen Fehler verwendet, tritt er auf.Leider habe ich diesen Unterschied entdeckt, nachdem ich stundenlang versucht hatte, das Problem zu beheben. Ich habe es geschafft, eine Problemumgehung zu finden, wenn ich die erste Option verwendet habe, nämlich dem Objekt eine String-Konverter-Methode wie folgt hinzuzufügen:
Hoffe, dieses Wissen wird jemandem von Nutzen sein.
quelle
Django-Dokumentation bevorzugt jetzt
{% load static %}
.{% load staticfiles %}
funktioniert, aber ich denke, es ist veraltet.https://docs.djangoproject.com/de/dev/ref/templates/builtins/#static
quelle
Lesen Sie die Dokumente , in denen es eine schöne Erklärung dafür gibt. Tatsächlich
{% static %}
kennt das Template-Tag den Speicherort von STATICFILE_STORAGEWie die Dokumente sagen:
Hoffentlich hilft das!!
quelle
{% load static %}
soll{% load staticfiles %}
,{{STATIC_URL}}
... und weiß, dass ich nicht weiß, was der Unterschied zwischen{% load static %}
und{% load static from staticfiles %}
{% load staticfiles %}
ist sehr hilfreich, wenn Sie verschiedene Speicher wie S3 verwenden, dann wird es in die S3-URLs konvertiertquelle