在Django模板中嵌入For循环中更改列表

时间:2016-06-06 21:10:12

标签: python django templates

我的Django模板中有以下代码:

{% for matrix_row in request.session.matrix_rows %}
    {% for radio in form.matrix_row_one_column_value %}
       <li>{{ radio }}</li>
    {% endfor %}
{% endfor %}

如何迭代外部for循环,如何更改内部for循环的列表?例如,外部for循环的连续传递列表应如下所示:

form.matrix_row_one_column_value
form.matrix_row_two_column_value
form.matrix_row_three_column_value
form.matrix_row_four_column_value
form.matrix_row_five_column_value
form.matrix_row_six_column_value

任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

为什么不在视图中完成工作而不是试图在模板中提出复杂的内容?

例如,在你的Python中:

names = ['apple', 'orange', 'carrot']
colors = [ ['red', 'green'], ['orange', 'red'], ['orange', 'yellow'] ]
fruits = zip(names, colors)

然后在你的模板中:

{% for name, colors in fruits %}
  <div>
  {{ name }} -
  {% for color in colors %}
    {{ color }}
  {% endfor %}
  </div> 
{% endfor %}

答案 1 :(得分:0)

如果我理解正确,您想要做的就像form[matrix_row]

{% for matrix_row in request.session.matrix_rows %}
    {% for radio in form[matrix_row] %}
       <li>{{ radio }}</li>
    ...

Django模板中不可能这样做,因此您需要为此添加自己的简单templatetag。像这样的东西

@register.filter
def keyvalue(dic, key):
    """Use a variable as a dictionary key"""
    return dic[key]

现在你可以做到

{% for matrix_row in request.session.matrix_rows %}
    {% for radio in form|keyvalue:matrix_row %}
       <li>{{ radio }}</li>
    ...