1

我正在使用 Pelican 生成静态博客。我有一个链接页面,其中包含从中央列表填充的三列。我希望链接(a)按字母顺序排序,然后(b)分成三个。目前我可以做(a)(b),但不能同时做。

(一个)按字母顺序排序(这会产生三个按字母顺序排序的相同列):

{% 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 进行排序,然后分成三个相等的部分。

4

1 回答 1

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>
于 2015-03-23T22:06:58.190 回答