在 Django 模板的嵌入式 for 循环中更改列表



我的 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

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

你为什么不在视图中做工作,而不是尝试在模板中提出一些复杂的东西?

例如,在你的 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 %}

如果我理解正确的话,你想做的是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>
    ...

最新更新