2013-05-20 6 views
74

Attualmente sto migrando tutti i riferimenti di file statici nel mio progetto al nuovo tag {% static%} introdotto da django 1.5, ma sto riscontrando un problema, in alcuni luoghi che utilizzo le variabili per ottenere il contenuto. Con il nuovo tag non posso, c'è un modo per risolvere questo?django 1.5 - Come utilizzare le variabili all'interno del tag statico

codice attuale:

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

quello che dovrebbe essere (questo non funziona):

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

risposta

104

si dovrebbe essere in grado di concatenare le stringhe con la add template filter:

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

Quello che stai cercando di fare non funziona con il tag del modello static perché richiede una stringa o una variabile solo:

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

L'ho appena testato, non funziona neanche. Sembra che dovrò pensare a una soluzione alternativa per questo –

+1

Puoi essere più specifico come "non funziona"? Appena testato e uscite '/ static/assets/flags/de.gif' senza problemi ... –

+0

colpa mia! Non avevo caricato il tag statico, questa soluzione funzionava perfettamente :) –

10

ho avuto questo lavoro utilizzando una stringa vuota per il percorso statico e quindi utilizzando le mie variabili nella loro sezione, in questo modo:

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

questo è super intelligente, ma quello che ha detto @horbor, lo puoi semplificare ancora di più! https://docs.djangoproject.com/en/1.6/ref/templates/builtins/#std:templatetag-get_static_prefix – daviddeath

10

@rounin , puoi almeno usare

{% get_static_prefix %} 

che verrà caricato quando {% carica static%}. È semplicemente più naturale di {% static ''%} :)

+0

Impressionante, I ci proverò la prossima volta – rounin

+0

Questo non funzionerà con cose come ManifestStaticfilesStorage che cambia 'foo.js' in' foo.8c9a23d.js' – Kos

17

un modo più semplice è impostare {% static%} come variabile dall'inizio del codice html in modo che possiamo usarlo nel modo che vogliamo.

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

Questo fallisce se si utilizza lo storage s3 con URL firmati, come il back-end di Storage se non viene invocato per preparare l'URL per ogni file. – shuckc

+1

Questo sembra molto bello in un modello, ma questo è più di un hack che un modo pulito di usare statico. – Mikuz