django 1.5 - Statik etiket içinde değişkenler nasıl kullanılır


106

Şu anda projemdeki tüm statik dosya referanslarını django 1.5'in tanıttığı yeni {% static%} etiketine geçiriyorum, ancak bir sorun yaşıyorum, bazı yerlerde içeriği almak için değişkenler kullanıyorum. Yeni etiketle yapamıyorum, bunu çözmenin bir yolu var mı?

Mevcut kod:

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

Ne olmalı (bu işe yaramıyor):

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

Yanıtlar:


150

Dizeleri addşablon filtresiyle birleştirebilmelisiniz :

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

Yapmaya çalıştığınız şey, staticyalnızca bir dize veya bir değişken aldığından şablon etiketiyle çalışmaz :

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

24

daha temiz bir yol, {% static%} 'yi html'nin başından itibaren bir değişken olarak ayarlamaktır, böylece onu istediğimiz şekilde kullanabiliriz.

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

3
İmzalanmış URL'lerle s3 depolaması kullanıyorsanız, her dosya için URL'yi hazırlamak üzere çalıştırılmamışsa Depolama arka ucu olarak bu başarısız olur.
shuckc

2
Bu, bir şablonda çok güzel görünüyor, ancak bu, statik kullanmanın temiz bir yolundan çok bir hack.
Mikael Lindlöf

23

Değeri ne olursa olsun, bunun en kolay yol olduğunu düşünüyorum:

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

Bu eski bir soru ve o zaman bu yöntemin yapılıp yapılamayacağından emin değilim, Ama şimdi, Django 2.0'da bu benim için iyi çalışıyor gibi görünüyor.


4
Bu yöntemin Django 2.0'da çalıştığını onaylıyorum ve bence sorunu çözmenin en iyi yolu bu.
Orangft

Benim için
işe yarıyor

Karma dosya adlarıyla çalışmaz (ManifestStaticfilesStorage).
run_the_race

@run_the_race aslında ilgili. ancak ilk argümanın bir tamsayı olamayacağını bildiğimiz için, bu durumda güvenli olmalıdır. Ayrıca, karma dosya adlarında " str " veya " add " tanımlı mı?
aliqandil


13

@rounin, en azından kullanabilirsin

{% get_static_prefix %} 

hangi {% yüklediğinizde statik%} yüklenecektir. {% Static ''%} 'den daha doğaldır :)


Bu ManifestStaticfilesStorage gibi şeylerle çalışmaz değişiklikler foo.jsiçinefoo.8c9a23d.js
Kos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.