【问题标题】:List of tuples in django templatedjango 模板中的元组列表
【发布时间】:2013-07-29 08:20:31
【问题描述】:

我的视图中有一个标签列表和一个值列表,其中第一个列表中的第 n 个元素对应于第二个列表的第 n 个元素,我想在我的模板中按顺序在列表中显示它们或选项卡,例如:

- label1 : text1 
- label2 : text2 ..

为此,我压缩了两个列表:

labels = []
texts = [] 
#function that fills the lists.
values = zip(labels,results)
context = {'values': values }  
return render(request,'mypage.html',context)

然后在我的模板中我尝试了这个:

{% for value in values %}
<ul>
<li> {{value}}.</li>
</ul>

但这会呈现一个页面:

  • ('label1', 'text1')
  • ('label2', 'text2')

我还尝试使用标签作为键和文本作为值的字典,它呈现得很好,但是由于它是一个字典,因此不尊重顺序。我想到了其他方法,例如第一行有两个字典,第二行有另一个字典,但是由于我对 python 和 django 模板的了解不够一致,所以我不知道该怎么做。

如果有人可以提供帮助,将不胜感激。

编辑:实际上我在问这个问题后两分钟就找到了答案,但我会留下它以防它可以帮助任何人。在模板中,我刚刚做了:

{% for labels, texts in values %}
<ul>
<li> {{labels}} : {{texts}}.</li>
</ul>

【问题讨论】:

    标签: python django django-templates tuples


    【解决方案1】:

    使用str.join:

    values = [" : ".join(x) for x in zip(labels,results)]
    

    并将这个列表传递给模板。

    只需zip,您需要在模板内进行解包:

    values = zip(labels,results)
    
    {% for label, text in values %}
    <ul>
    <li> {{ label }} : {{ text }}</li>
    </ul>
    

    【讨论】:

    • 这很快谢谢你,我编辑了我的问题,因为我在看到你的问题之前找到了答案,但你认为我应该保持这种方式还是使用 str.join 代替?
    • @sarahm 这取决于,如果您在不同的模板中使用相同的列表(或在同一模板中多次使用),那么最好将此类逻辑保留在一个位置(在带有 str.join 的视图文件中),因为如果您需要将: 更改为其他内容,那么您必须在多个位置进行更改,但在视图文件中使用str.join,您只需在一个位置进行更改。但是,如果你只做一次,那么你的方法没有任何问题。
    • @sarahm 另外,如果您压缩的不仅仅是两个项目 (zip(foo, bar, spam, eggs)),那么太多的拆包看起来会很丑,str.join 在这种情况下会更好。
    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2019-05-06
    • 2011-07-10
    • 2016-05-01
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多