django 1.5 - 如何在静态标记内使用变量

时间:2013-05-20 18:24:56

标签: django django-templates django-staticfiles

我目前正在将项目中的所有静态文件引用迁移到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' %}" />

5 个答案:

答案 0 :(得分:127)

您应该能够使用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 %}

答案 1 :(得分:20)

更简洁的方法是将{%static%}设置为html开头的变量,以便我们以任何我们想要的方式使用它。

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

答案 2 :(得分:12)

我通过在静态路径中使用空字符串然后在自己的部分中使用我的变量来实现这一点,如下所示:

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

答案 3 :(得分:10)

@rounin,你至少可以使用

{% get_static_prefix %} 

将在{%load static%}时加载。这比{%static''%}:)

更自然

答案 4 :(得分:10)

对于它的价值,我认为这是最简单的方法:

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

这是一个古老的问题,我不确定这种方法是否可以在当时完成,但现在,在Django 2.0中,这对我来说似乎没问题。