122

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

5 回答 5

171

您应该能够使用add模板过滤器连接字符串:

{% 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 %}
于 2013-05-20T18:45:24.743 回答
37

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

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

这是一个老问题,我不确定当时是否可以使用这种方法,但现在,在 Django 2.0 中,这对我来说似乎工作得很好。

于 2018-03-28T04:45:30.637 回答
26

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

{% load static %}
{% static "" as baseUrl %}
<img src="{{ baseUrl }}/img/{{p.id}}"></img>
于 2015-03-03T03:37:04.353 回答
21

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

<a href= "{% static "" %}{{obj.a}}/{{obj.b}}/{{obj.c}}.gz" >Name</a>
于 2014-03-13T07:47:14.333 回答
14

@rounin,您至少可以使用

{% get_static_prefix %} 

当您 {% load static %} 时将加载它。它比 {% static '' %} 更自然:)

于 2014-05-18T18:21:13.627 回答