如何使用Jinja2生成类似索引的列表?

时间:2014-02-19 15:07:09

标签: sorting jinja2 pelican

在索引中,引用按字母顺序列出并按字母分组。此外,不是简单的字母排序,而是在排序之前删除主要文章和标点符号。结果如下:

A
阿巴
弓箭手 远离这里


“曼谷”迈克 子弹

我正在使用Pelican静态站点生成器,它在模板中使用了Jinja2,我想在我的网站上创建一个类似电视节目的索引。

电视节目名称列在元数据字段{{article.showname}}中(每个帖子只有一个节目,因此元数据字段中只有一个节目),因此很容易检索。但剥离主要文章/标点符号,按首字母分组并插入正确的字母表字母比我知道的要多。

我可以采取的步骤

我可以删除主要文章/标点符号并创建另一个元数据字段,其中包含可以排序的节目名称,例如{{article.shownamesort}}。就此而言,如果没有一种简单的方法可以按照第一个字母对名称进行分组,我可以创建一个元数据字段,其中包含节目的第一个(可排序的)字母{{article.shownameletter}}。

对于每个字母,我可以创建一个循环,首先抓住该字母的帖子:

{% if article.shownameletter == "A" %}

完成后,我不知道如何根据不同元数据字段的文本从一个元数据字段中对文本进行排序。也就是说,我不知道如何打印按{{article.shownamesort}}列表排序的{{article.showname}}列表。这可以在Jinja2中完成吗?为了记录,如果有一个采用完全不同的方法的解决方案,我会非常满意它,包括它是否需要不同/更多的元数据字段。

1 个答案:

答案 0 :(得分:0)

我在标签和类别页面上做了类似的事情。它遍历所有字符,然后打印结果

迭代这些字母:

{% for char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"|list %}
...
{% endfor %}

show或not的比较显示标签:

{% if char == tag|upper|truncate(1, True, end='') %}
...
{% endif %}

完整示例:

{% for char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"|list %}
    <h2>{{char}}</h2>
    {% for tag, articles in tags|sort %}
        {% if char == tag|upper|truncate(1, True, end='') %}
            <dt>{{ tag }}</dt>
            {% for article in articles|sort %}
                <dd><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a></dd>
            {% endfor %}
        {% endif %}
    {% endfor %}
{% endfor %}