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 introduit, mais j'ai un problème, à certains endroits, j'utilise des variables pour obtenir le contenu. Avec le nouveau tag que je ne peux pas, y at-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 que ça devrait être (ça ne marche pas):
<img src="{% static 'assets/flags/{{ request.LANGUAGE_CODE }}.gif' %}" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" />
Vous devriez pouvoir concaténer des chaînes avec le filtre add
template :
{% 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 la balise template static
car elle nécessite uniquement une chaîne 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 %}
une méthode plus simple consiste à définir {% static%} comme une variable à partir du début du code HTML afin que nous puissions l'utiliser de la manière que nous voulons.
{% load static %}
{% static "" as baseUrl %}
<img src="{{ baseUrl }}/img/{{p.id}}"></img>
J'ai réussi à utiliser ceci en utilisant une chaîne vide pour le chemin statique, puis en utilisant mes variables dans leur propre section, comme ceci:
<a href= "{% static "" %}{{obj.a}}/{{obj.b}}/{{obj.c}}.gz" >Name</a>
Pour ce que ça vaut, je pense que c'est le moyen le plus simple:
<img src="{% static 'assets/flags/'|add:request.LANGUAGE_CODE|add:'.gif' %}" ... >
C'est une vieille question et je ne sais pas si cette méthode pourrait être utilisée à l'époque, mais maintenant, dans Django 2.0), cela semble bien fonctionner pour moi.
@rounin, vous pouvez au moins utiliser
{% get_static_prefix %}
qui sera chargé lorsque vous {% load static%}. C'est plus naturel que {% static ''%} :)