插值Django模板包含变量

时间:2011-09-27 19:00:08

标签: django django-templates

我正在做类似

的事情
{% for part in parts %}
     {% include "inc.html" with o=part prefix="part{{ forloop.counter0 }}_" %}
{% endfor %}

inc.html可能属于这种类型:

<p id="{{ prefix }}para">{{ o.text }}</p>

我刚发现前缀变量没有插值,而"part{{ forloop.counter0 }}_"字面上传递。

任何相对优雅的解决方案?

1 个答案:

答案 0 :(得分:3)

我认为最好的解决方案是注册一个include_tag,它将处理part和forloop.counter操作:

@register.inclusion_tag("inc.html")
def inc_tag(part, loop_counter):
    prefix = 'part%s_' % (loop_counter,)
    context = {
        'part': part,
        'prefix': prefix,
    }
    return context

你会这样称呼它

{% for part in parts %}
    {% inc_tag part=part loop_counter=forloop.counter0 %}
{% endfor %}

你的方式也是可行的,但我不建议

{% for part in parts %}
    {% with "part"|add:forloop.counter0|add:"_" as prefx %}
        {% include "inc.html" with o=part prefix=prefix %}
    {% endwith %}
{% endfor %}