拆分和排序列表 Jinja/Pelican
Split AND sort list Jinja/Pelican
我正在使用 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) split into three parts(这将未排序的列表分成三部分):
<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 进行排序,然后分成三等份。
使用 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>
我正在使用 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) split into three parts(这将未排序的列表分成三部分):
<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 进行排序,然后分成三等份。
使用 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>