Quelle est la différence entre {% load staticfiles%} et {% load static%}

92

La partie la plus importante de la question est dans le sujet.

Je me demande quelle balise est la meilleure pour quel cas. De plus ... j'ai trouvé du code, qui utilise également settings.STATIC_URLinclus {{STATIC_URL}}dans les modèles.

Je suis un peu confus.

trikoder_beta
la source
J'utilise juste STATIC_URL pour tout et cela semble bien fonctionner pour moi
Maximas
1
@Maximas Cela fonctionne, mais je suppose que ce n'est pas la meilleure pratique
KhoPhi
1
Aucune de ces réponses n'est bonne. C'est une réponse plus récente et complète .
Jarad

Réponses:

60

Le intégré static balise de modèle "lien [s] vers les fichiers statiques enregistrés dans STATIC_ROOT".

L' staticfilesapplication contribstatic balise de modèle de "utilise le STATICFILES_STORAGEstockage configuré pour créer l'URL complète du chemin relatif donné", ce qui est "particulièrement utile lors de l'utilisation d'un backend de stockage non local pour déployer des fichiers".

La staticdocumentation de la balise de modèle intégrée (liée à ci-dessus) contient une note indiquant d'utiliser l' staticfilesapplication contribstatic balise de modèle de "si vous avez un cas d'utilisation avancé, comme l'utilisation d'un service cloud pour servir des fichiers statiques", et elle donne cet exemple de Ce faisant:

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

Vous pouvez utiliser {% load staticfiles %}plutôt que {% load static from staticfiles %}si vous le souhaitez, mais ce dernier est plus explicite.

pseudo
la source
30
Django V1.10 recommande maintenant juste {% load static %}. "Dans les anciennes versions, vous deviez utiliser {% load static from staticfiles %}dans votre modèle pour servir des fichiers à partir du stockage défini dans STATICFILES_STORAGE. Ce n'est plus nécessaire."
John C du
1
Depuis 2016, nous n'avons besoin que d'utiliser {% load static %}.
Uri
5

Je ne sais pas quelle est la différence, mais j'ai trouvé une différence de cas d'utilisation (en utilisant django 1.9.1 fonctionnant via apache, wsgi sur Python 3.4). Dans mon application, j'ai des images ImageFieldsdans la base de données. Si j'utilise un code comme celui-ci dans mon modèle:

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

puis, si j'utilise {% load static %}, django lance un TypeError( Cannot mix str and non-str arguments). Ceci est probablement dû au fait que le object.imagen'est pas une chaîne, c'est un ImageField, qui est converti en chaîne à un stade ultérieur. Cependant, si l'on utilise une {% load staticfiles %}telle erreur, aucune erreur ne se produit.

Malheureusement, j'ai découvert cette différence après avoir passé des heures à essayer de déboguer le problème. J'ai réussi à trouver une solution de contournement lors de l'utilisation de la première option, à savoir pour ajouter une méthode de convertisseur de chaîne à l'objet comme ceci:

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

J'espère que cette connaissance sera utile à quelqu'un.

CoderGuy123
la source
1

Reportez-vous à la documentation , où il y a une belle explication à ce sujet. En fait, la {% static %}balise de modèle connaît l'emplacement de STATICFILE_STORAGE

Comme le disent les documents:

 {% 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".

Cela est particulièrement utile lorsque vous utilisez un backend de stockage non local pour déployer des fichiers comme indiqué dans la section Traitement de fichiers statiques à partir d'un service cloud ou d'un CDN.

Si vous souhaitez récupérer une URL statique sans l'afficher, vous pouvez utiliser un appel légèrement différent:

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

J'espère que cela pourra aider!!

S.Ali
la source
17
Je ne sais pas encore quand dois - je utiliser {% load static %}, {% load staticfiles %}, {{STATIC_URL}}... et sais que je ne sais pas quelle est la différence entre {% load static %}et{% load static from staticfiles %}
trikoder_beta
1
copier simplement un tas de lignes du document n'aide pas vraiment
Hasan Iqbal
1

{% load staticfiles %} est très utile lorsque vous utilisez différents stockages comme S3, puis il sera converti en URL S3

Dilraj
la source