Django / Jinja2:如何在for-loop语句中使用索引值来显示两个列表?

时间:2017-10-01 21:59:39

标签: python django jinja2

我正在尝试显示两个列表中的项目。这是我的代码:

#Django view.py file
def display(request):
   listone = ['duck', 'chicken', 'cat', 'dog']
   lents = len(list_one)
   listtwo = ['4 dollars', '3 dollars', '2 dollars', '1 dollars']
   return render(request, 'display.html', {'itemone' : listone, 'itemtwo' : listtwo, 'lents' : lents})

这是显示列表的display.html模板:

<table>
   <tr>
     <th>Pet</th>
     <th>Price</th> 
   </tr>
   {% for numbers in lents %}
      <tr>
        <td>{{ itemone.numbers }}</td>
        <td>{{ itemtwo.numbers }}</td>
      </tr>
   {% endfor %}
</table>

但没有运气,它不会根据索引'数字'显示结果,假设从'0'到'3',td标签保持为空。

1 个答案:

答案 0 :(得分:2)

更好的选择是在视图中创建一个zip对象,以便将宠物与价格相匹配,并仅将其传递给模板:

def display(request):
   listone = ['duck', 'chicken', 'cat', 'dog']
   listtwo = ['4 dollars', '3 dollars', '2 dollars', '1 dollars']
   fusion = zip(listone, listtwo)
   return render(request, 'display.html', {'fusion' : fusion})

然后你可以在模板中解压缩它,zip()会生成一个元组列表(name, price),你可以轻松地循环这个:

<table>
   <tr>
     <th>Pet</th>
     <th>Price</th>
   </tr>
   {% for name, price in fusion %}
      <tr>
        <td>{{ name }}</td>
        <td>{{ price }}</td>
      </tr>
   {% endfor %}
</table>

另一种解决方案是创建新的自定义template filter,已经有一些帖子解释了该过程:https://stackoverflow.com/a/29664945/6655211