Теги шаблона Django {{for / empty}} для переменной цикла - PullRequest
6 голосов
/ 12 марта 2012

Для генерации набора переменных Javascript с соответствующими параметрами из моего приложения Django у меня есть два вложенных цикла 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 Ответ

7 голосов
/ 12 марта 2012

Это ожидаемое поведение.Проще говоря, мы имеем:

{% 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 }} = []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...