Django模板标记{{for / empty}}用于循环变量

时间:2012-03-12 12:58:12

标签: javascript python django

要使用我的Django应用程序中的相关参数生成一组Javascript变量,我有两个嵌套的for循环:

<script>
{% for model in models %} 
    {% for item in model.attribute|slice:":3" %}
        {% if forloop.first %} 
            var js_variable{{ forloop.parentloop.counter0 }} = [
        {% endif %}
            '{{ item.attribute }}' ,
        {% if forloop.last %}
            {{ item.attribute }} ]
    {% empty %}
        var js_variable{{ forloop.parentloop.counter0 }} = []
    {% endfor %}
{% endfor %}

....code that gets unhappy when js_variable[n] doesn't exist.....

</script>

{% empty %}出现时,它似乎无法访问{{ forloop.parentloop. counter0 }}变量,因此变量名js_variable[n]打印错误为js_variable(没有计数器另外提供的号码,以及后来的代码抱怨。

这个变量是否会在{{ empty }}代码中无法使用?

1 个答案:

答案 0 :(得分:7)

这是预期的行为。简化我们:

{% for A ... %}
    {{ forloop.* }} is there for the 'for A ...'

    {% for B ... %}
        {{ forloop.* }} is there for the 'for B ...'
        {{ forloop.parentloop.* }} refers to the 'for A ...'
    {% empty %}
        {{ forloop.* }} is there for the 'for A ...' !!!
    {% endfor %}
{% endfor %}

在{%empty%}中,{{forloop}}指的是父forloop!变化:

var js_variable{{ forloop.parentloop.counter0 }} = []

使用:

var js_variable{{ forloop.counter0 }} = []