web-dev-qa-db-ja.com

django 1.5-静的タグ内で変数を使用する方法

現在、プロジェクト内のすべての静的ファイル参照を、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' %}" />
86
Oscar Carballal

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

よりわかりやすい方法は、{%static%}をhtmlの先頭から変数として設定することです。これにより、任意の方法で使用できます。

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

静的パスに空の文字列を使用し、独自のセクションで次のように変数を使用して、これを機能させました:

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

それが価値があることについては、これが最も簡単な方法だと思います:

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

これは古い質問であり、この方法が当時実行できるかどうかはわかりませんが、Django 2.0ではこれでうまくいくようです。

12
aliqandil

@rounin、少なくとも、使用できます

{% get_static_prefix %} 

{%load static%}のときにロードされます。 {%static ''%}よりも自然です:)

10
horbor