Pelican 静的サイト ジェネレーターを使用して大量のブログを作成しています。Pelican のテーマは、インデックス ページのページに配置され、投稿のタイトルと要約のリストを表示し、投稿を日付順に並べ替えます。ブートストラップ テーマから、これがどのように達成されるかの例を次に示します。
{% if articles %}
{% for article in (articles_page.object_list if articles_page else articles) %}
<div class='article'>
<h2>{{ article.title }}</h2>
<div class="well small">{% include "metadata.html" %}</div>
<div class="summary">{{ article.summary }} <a class="btn primary xsmall" href="{{ SITEURL }}/{{ article.url }}">more…</a>
</div>
</div>
{% endfor %}
{%endif%}
また、ページネーション ナビゲーションのかなり標準的なコードは次のとおりです。
{% if articles_page and articles_paginator.num_pages > 1 %}
<div class="pagination">
<ul>
{% if articles_page.has_previous() %}
{% set num = articles_page.previous_page_number() %}
<li class="prev"><a href="{{ SITEURL }}/{{ page_name }}{{ num if num > 1 else '' }}.html">← Previous</a></li>
{% else %}
<li class="prev disabled"><a href="#">← Previous</a></li>
{% endif %}
{% for num in range( 1, 1 + articles_paginator.num_pages ) %}
<li class="{{ 'active' if num == articles_page.number else '' }}"><a href="{{ SITEURL }}/{{ page_name }}{{ num if num > 1 else '' }}.html">{{ num }}</a></li>
{% endfor %}
{% if articles_page.has_next() %}
<li class="next"><a href="{{ SITEURL }}/{{ page_name }}{{ articles_page.next_page_number() }}.html">Next →</a></li>
{% else %}
<li class="next disabled"><a href="#">→ Next</a></li>
{% endif %}
私のサイトには、共有する情報が小さなスペース (1 日に 20 記事の場合もあります) にたくさんあるため、要約を 1 行にまとめて書きました。投稿ごとに日付をリストする代わりに、次のようにインデックス ページで投稿を日付ごとにグループ化するようにします。
2014 年 2 月 1 日
投稿 1
投稿 2
投稿 3
2014 年 2 月 2 日
投稿 1
投稿 2
以下は、Jinja2 を使用して記事を日付別にグループ化する方法です。
{% if articles %}
{% for year, year_articles in articles|groupby('date.year')|sort(reverse=True) %}
{% for month, month_articles in year_articles|groupby('date.month')|sort(reverse=True) %}
{% for day, day_articles in month_articles|groupby('date.day')|sort(reverse=True) %}
<dl>
<dt>{{ day_articles[0].date.strftime('%d %B %Y') }}</dt>
{% for article in day_articles %}
<dd>
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a>
</dd>
{% endfor %}
</dl>
{% endfor %}
{% endfor %}
{% endfor %}
{% endif %}
これらの機能を組み合わせて、記事が日付ごとにグループ化され、ページ分割されるようにしたいと考えています。これまでのところ、私の認められた推測は失敗しました。最初は 100 個の記事を使用しており、1 ページに 10 個の記事を表示するように設定しています。私の試みでは、インデックスには 10 ページの記事がリストされていますが、各ページにすべての記事が表示されています。私はどんな実用的な解決策にも満足しています。続行する方法はありますか?
さらなる考察
おそらく、すべてのグループ化の代わりに、Jinja の if ループは、その日付にリストされている最初の記事を識別し、日付、次にリンクされた記事のタイトルなどを書き込むことができます。その後のすべての記事では、日付の印刷をスキップして、リンクされた記事のタイトルなど。それを行う方法がわかりません。そのifループは、ページネーターをゲームからノックアウトすることを回避する必要があります。しかし、うまくいけば、見栄えの良いリストを作成することは、Jinja の仕事ではなく CSS の仕事です。