2

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…&lt;/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">&larr; Previous</a></li>
{% else %}
    <li class="prev disabled"><a href="#">&larr; 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 &rarr;</a></li>
{% else %}
    <li class="next disabled"><a href="#">&rarr; 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 の仕事です。

4

2 に答える 2

1

記事の代わりに、 dates_page変数を使用してください。詳細については、http: //pelican.readthedocs.org/en/latest/themes.html#index-htmlを参照してください。

  • dates_paginator 記事リストのページネーター オブジェクト。日付順、昇順。
  • dates_page 記事の現在のページ。日付順、昇順。
于 2014-02-24T23:25:21.157 に答える