我正在使用Pelican生成静态博客。我有一个链接页面,其中有三列从中央列表中填充。我希望链接按(a)按字母顺序排序,然后(b)分成三个。目前,我可以同时执行(a)或(b),但不能同时执行这两项操作。
(a)按字母顺序排序(这会产生三个按字母顺序排列的相同列):
{% for name, link in LINKS|sort %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
</div>
<div class="l-box pure-u-1-3">
{% for name, link in LINKS|sort %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
</div>
<div class="l-box pure-u-1-3">
{% for name, link in LINKS|sort %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
(b)分为三个部分(将未分类的列表拆分为三部分):
<div class="l-box pure-u-1-3">
{% for name, link in LINKS[0:10] %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
</div>
<div class="l-box pure-u-1-3">
{% for name, link in LINKS[11:20] %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
</div>
<div class="l-box pure-u-1-3">
{% for name, link in LINKS[21:30] %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
</div>
澄清。我希望按字母顺序排序LINKS然后分成三个相等的部分。
答案 0 :(得分:1)
使用slice()
过滤器将已排序的链接分组为3个单独的组;然后你可以嵌套循环:
{% for column in LINKS|sort|slice(3) %}
<div class="l-box pure-u-1-3">
{% for name, link in column %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
</div>
{% endfor %}
演示:
>>> from jinja2 import Template
>>> template = Template('''
... {% for column in LINKS|sort|slice(3) %}
... <div class="l-box pure-u-1-3">
... {% for name, link in column %}
... <li><a href="{{ link }}">{{ name }}</a></li>
... {% endfor %}
... </div>
... {% endfor %}
... ''')
>>> links = [
... ('Foo', 'link/to/foo'),
... ('Bar', 'link/to/bar'),
... ('Spam', 'link/to/spam'),
... ('Ham', 'link/to/ham'),
... ('Eggs', 'link/to/eggs'),
... ]
>>> print template.render(LINKS=links)
<div class="l-box pure-u-1-3">
<li><a href="link/to/bar">Bar</a></li>
<li><a href="link/to/eggs">Eggs</a></li>
</div>
<div class="l-box pure-u-1-3">
<li><a href="link/to/foo">Foo</a></li>
<li><a href="link/to/ham">Ham</a></li>
</div>
<div class="l-box pure-u-1-3">
<li><a href="link/to/spam">Spam</a></li>
</div>