To generate a set of Javascript variables with the relevant parameters from my Django application I have two nested for loops:
<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>
When {% empty %}
occurs it doesn't seem to have the access to the {{ forloop.parentloop. counter0 }}
variable, and so the variable name js_variable[n]
is printed incorrectly as js_variable
(without the number otherwise provided by the counter), and later code complains.
Is it the case that this variable won't be available in the {{ empty }}
tag?
To generate a set of Javascript variables with the relevant parameters from my Django application I have two nested for loops:
<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>
When {% empty %}
occurs it doesn't seem to have the access to the {{ forloop.parentloop. counter0 }}
variable, and so the variable name js_variable[n]
is printed incorrectly as js_variable
(without the number otherwise provided by the counter), and later code complains.
Is it the case that this variable won't be available in the {{ empty }}
tag?
1 Answer
Reset to default 17This is an expected behavior. Simplifying we have:
{% 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 %}
In {% empty %}, {{ forloop }} refers to the parent forloop! Change:
var js_variable{{ forloop.parentloop.counter0 }} = []
With:
var js_variable{{ forloop.counter0 }} = []