问题
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\' %}\" />
回答1:
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 %}
回答2:
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>
回答3:
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.
回答4:
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:
@rounin, you can, at least, use
{% get_static_prefix %}
which will be loaded when you {% load static %}. It's just more natural then {% static '' %} :)
来源:https://stackoverflow.com/questions/16655851/django-1-5-how-to-use-variables-inside-static-tag