web-dev-qa-db-fra.com

django 1.5 - Comment utiliser des variables dans 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 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' %}" />
86
Oscar Carballal

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 %}
130
Bernhard Vallant

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>
22
cyberpolin

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>
14
rounin

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.

12
aliqandil

@rounin, vous pouvez au moins utiliser

{% get_static_prefix %} 

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

10
horbor