124 votes

django 1.5 - Comment utiliser des variables à l'intérieur d'une balise statique ?

Je suis en train de migrer toutes les références de fichiers statiques de mon projet vers la nouvelle balise {% static %} que django 1.5 a introduite, mais j'ai un problème, à certains endroits j'utilise des variables pour obtenir le contenu. Avec la nouvelle balise, je ne peux pas. Y a-t-il un moyen de résoudre ce problème ?

Code actuel :

<img src="{{ STATIC_URL }}/assets/flags/{{ request.LANGUAGE_CODE }}.gif" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" />

Ce qu'il devrait être (cela ne fonctionne pas) :

<img src="{% static 'assets/flags/{{ request.LANGUAGE_CODE }}.gif' %}" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" />

173voto

Bernhard Vallant Points 18035

Vous devriez être en mesure de concaténer des chaînes de caractères avec la fonction add filtre de modèle :

{% with 'assets/flags/'|add:request.LANGUAGE_CODE|add:'.gif' as image_static %}
  {% static image_static %}
{% endwith %}

Ce que vous essayez de faire ne fonctionne pas avec l'option static car elle prend uniquement une chaîne de caractères ou une variable :

{% static "myapp/css/base.css" %}
{% static variable_with_path %}
{% static "myapp/css/base.css" as admin_base_css %}
{% static variable_with_path as varname %}

37voto

aliqandil Points 148

Pour ce que ça vaut, je pense que c'est la manière la plus simple :

<img src="{% static 'assets/flags/'|add:request.LANGUAGE_CODE|add:'.gif' %}" ... >

C'est une vieille question et je ne suis pas sûr que cette méthode pouvait être utilisée à l'époque. Mais maintenant, dans Django 2.0, cela semble fonctionner correctement pour moi.

26voto

cyberpolin Points 285

Une manière plus propre est de définir le {% static %} comme une variable dès le début du html afin de pouvoir l'utiliser de la manière que l'on veut.

{% load static %}
{% static "" as baseUrl %}
<img src="{{ baseUrl }}/img/{{p.id}}"></img>

22voto

rounin Points 450

J'ai réussi à le faire fonctionner en utilisant une chaîne vide pour le chemin statique et en utilisant mes variables dans leur propre section, comme ceci :

<a href= "{% static "" %}{{obj.a}}/{{obj.b}}/{{obj.c}}.gz" >Name</a>

14voto

horbor Points 300

@rounin, vous pouvez, au moins, utiliser

{% get_static_prefix %} 

qui sera chargé lorsque vous {% load static %}. C'est juste plus naturel que {% static '' %} :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X