django 1.5 - How to use variables inside static ta

2019-01-04 23:28发布

I'm currently migrating all the static files references in my project to the new {% static %} tag that django 1.5 introduced, but I'm having a problem, in some places I use variables to get the content. With the new tag I can't, is there any way to solve this?

Current code:

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

What it should be (this doesn't work):

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

5条回答
霸刀☆藐视天下
2楼-- · 2019-01-04 23:48

@rounin, you can, at least, use

{% get_static_prefix %} 

which will be loaded when you {% load static %}. It's just more natural then {% static '' %} :)

查看更多
smile是对你的礼貌
3楼-- · 2019-01-04 23:50

You should be able to concatenate strings with the add template filter:

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

What you are trying to do doesn't work with the static template tag because it takes either a string or a variable only:

{% static "myapp/css/base.css" %}
{% static variable_with_path %}
{% static "myapp/css/base.css" as admin_base_css %}
{% static variable_with_path as varname %}
查看更多
霸刀☆藐视天下
4楼-- · 2019-01-04 23:53

I got this to work by using an empty string for the static path and then using my variables in their own section, like this:

<a href= "{% static "" %}{{obj.a}}/{{obj.b}}/{{obj.c}}.gz" >Name</a>
查看更多
三岁会撩人
5楼-- · 2019-01-04 23:57

a cleaner way is to set the {% static %} as a variable from the beginning of the html so we can use it in any way we want.

{% load static %}
{% static "" as baseUrl %}
<img src="{{ baseUrl }}/img/{{p.id}}"></img>
查看更多
Lonely孤独者°
6楼-- · 2019-01-05 00:01

For what it's worth, I think this is the easiest way:

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

This is and old question and I'm not sure if this method could be done back then, But now, in Django 2.0 this seems to work fine for me.

查看更多
登录 后发表回答