現在、プロジェクト内のすべての静的ファイル参照を、Django 1.5が導入された新しい{%static%}タグに移行していますが、変数を使用している場所で問題が発生しています新しいタグではできないのですが、これを解決する方法はありますか?
現在のコード:
<img src="{{ STATIC_URL }}/assets/flags/{{ request.LANGUAGE_CODE }}.gif" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" />
どうあるべきか(これは機能しません):
<img src="{% static 'assets/flags/{{ request.LANGUAGE_CODE }}.gif' %}" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" />
add
template filter で文字列を連結できるはずです:
{% with 'assets/flags/'|add:request.LANGUAGE_CODE|add:'.gif' as image_static %}
{% static image_static %}
{% endwith %}
あなたがしようとしていることは、文字列または変数のみを受け取るため、static
テンプレートタグでは動作しません:
{% static "myapp/css/base.css" %}
{% static variable_with_path %}
{% static "myapp/css/base.css" as admin_base_css %}
{% static variable_with_path as varname %}
よりわかりやすい方法は、{%static%}をhtmlの先頭から変数として設定することです。これにより、任意の方法で使用できます。
{% load static %}
{% static "" as baseUrl %}
<img src="{{ baseUrl }}/img/{{p.id}}"></img>
静的パスに空の文字列を使用し、独自のセクションで次のように変数を使用して、これを機能させました:
<a href= "{% static "" %}{{obj.a}}/{{obj.b}}/{{obj.c}}.gz" >Name</a>
それが価値があることについては、これが最も簡単な方法だと思います:
<img src="{% static 'assets/flags/'|add:request.LANGUAGE_CODE|add:'.gif' %}" ... >
これは古い質問であり、この方法が当時実行できるかどうかはわかりませんが、Django 2.0ではこれでうまくいくようです。
@rounin、少なくとも、使用できます
{% get_static_prefix %}
{%load static%}のときにロードされます。 {%static ''%}よりも自然です:)