gpt4 book ai didi

python - 遍历 jinja2 中的一个元组

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:38 24 4
gpt4 key购买 nike

我有一个格式为 ['DD', 'MM', 'YYYY'] 的日期列表,并将其保存到一个名为 listdates [['DD', 'MM', 'YYYY'], [' DD', 'MM', 'YYYY']]

我想做一个这样的html

<li class="year">
<a href="#">2013</a>
<ul>
<li class="month">
<a href="#">11</a>
<ul>
<li class="day">01</li>
<li class="day">02</li>
<li class="day">03</li>
...
</ul>
</li>
<li class="month">
<a href="#">12</a>
<ul>
<li class="day">01</li>
<li class="day">02</li>
...
</ul>
</li>
</ul>
</li>

我已经尝试了一天,但还没有找到方法。是否有捷径可寻 ?还是应该更改数据结构?

最佳答案

你应该改变数据结构。像这样的复杂数据处理属于 Python 而不是模板。您会发现在 Jinja 2 中可能有破解它的方法(尽管可能不在 Django 的模板中)。但你不应该那样做。

而是创建一个嵌套的数据结构

dates = [[d1, m1, y1], ..., [dn, mn, yn]]
datedict = {}
for d, m, y in dates:
yeardict = datedict.setdefault(y, {})
monthset = yeardict.setdefault(m, set())
monthset.add(d)

nested_dates = [(y, list((m, sorted(days))
for m, days in sorted(yeardict.items())))
for y, yeardict in sorted(datedict.items())]

所以如果 dates 开始为

dates = [[1, 2, 2013], [5, 2, 2013], [1, 3, 2013]]

nested_dates 将结束为

[(2013, [(2, [1, 5]), (3, [1])])]

所以你可以做

{% for year in nested_dates %}
<li class="year">
<a href="#">{{year.0}}</a>
<ul>
{% for month in year.1 %}
<li class="month">
<a href="#">{{month.0}}</a>
<ul>
{% for day in month.1 %}
<li class="day">{{day}}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}

注意:如果您希望您的代码在以后或对其他程序员有意义,那么列表推导式正在插入您在列表推导式中应该做的事情的限制。所以你可以更清楚地写成:

nested_dates = []
for y, yeardict in sorted(datedict.items()):
yearlist = []
for m, days in sorted(yeardict.items()):
yearlist.append((m, sorted(days)))
nested_dates.append((y, yearlist))

一般来说,对于任何以“如何让我的模板系统以这种结构输出数据”开头的问题,答案都是“以这种结构为其提供数据”。

关于python - 遍历 jinja2 中的一个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20317456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com