2013-05-20 8 views
74

Ich migriere derzeit alle Referenzen auf statische Dateien in meinem Projekt auf das neue {% static%} Tag, das django 1.5 eingeführt hat, aber ich habe ein Problem, in einigen Orte, an denen ich Variablen verwende, um den Inhalt zu erhalten. Mit dem neuen Tag kann ich nicht, gibt es eine Möglichkeit, das zu lösen?django 1.5 - Wie man Variablen innerhalb eines statischen Tags verwendet

Aktuelle Code:

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

Was es sein soll (das nicht funktioniert):

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

Antwort

104

Sie sollten Strings der Lage sein, verketten mit den add template filter:

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

Was Sie versuchen zu tun, funktioniert nicht mit dem Template-Tag static, weil es beides erfordert nur ein String oder eine 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 %} 
+2

Ich habe es gerade getestet, es funktioniert auch nicht. Scheint, dass ich eine Workaround für diese –

+1

denken müssen Können Sie genauer sein, wie "es nicht funktioniert"? Habe es einfach getestet und '/ static/assets/flags/de.gif' ohne Probleme ausgegeben ... –

+0

Meine Schuld! Ich hatte das statische Tag nicht geladen, diese Lösung funktionierte perfekt :) –

10

Ich habe dies durch die Verwendung einer leere Zeichenfolge für den statischen Pfad zu arbeiten und dann in einem eigenen Abschnitt meiner Variablen, wie folgt aus:

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

das ist super schlau, aber was @horbor sagte, du kannst es sogar noch mehr vereinfachen! https://docs.djangoproject.com/de/1.6/ref/templates/builtins/#std:templatetag-get_static_prefix – daviddeath

10

@rounin Sie können zumindest

verwenden, die geladen werden, wenn Sie {% load static%} laden. Es ist nur natürlicher, als {% static ''%} :)

+0

Ehrfürchtig, ich Ich werde es das nächste Mal versuchen. – rounin

+0

Dies funktioniert nicht mit Dingen wie ManifestStaticfilesStorage, das 'foo.js' in 'foo.8c9a23d.js' ändert. – Kos

17

ein sauberer Weg ist es, die {% static%} als Variable vom Anfang des HTML zu setzen, so dass wir es in jeder gewünschten Weise verwenden können.

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

Dies schlägt fehl, wenn Sie s3 Speicher mit signierten URLs verwenden, da das Storage Backend nicht aufgerufen wird, um die URL vorzubereiten jede Datei. – shuckc

+1

Das sieht in einer Vorlage sehr schön aus, aber das ist mehr ein Hack als eine saubere Art, statische Daten zu verwenden. – Mikuz

Verwandte Themen