Pansebete

Une note autocollante repositionnable sur une tête de bois

Trucs et astuces pour Pelican

24/06/2013 ⋅ Aucun commentaire

Par bendia

Pelican est un générateur de sites statiques écrit en python. Il utilise le système de gabarit (template) Jinja2. Bien que très fournie, la documentation manque parfois de précisions. En voici donc quelques unes ...

Localiser les dates


Dans le fichier de configuration pelicanconf.py, il est possible de spécifier la langue dans laquelle les dates doivent être écrites grâce à la variable LOCALE

LOCALE= (u'fr_FR.utf8')

Malgré cela, les dates restent écrites en anglais. Pour remédier à ce problème, il faut modifier les gabarit qui contiennent par exemple

<dt>{{ article.date.strftime('%a %d %B %Y') }}</dt>

en

<dt>{{ article.date|strftime('%a %d %B %Y') }}</dt>

Source : https://github.com/getpelican/pelican/pull/860

Utiliser la pagination


Boucler sur la bonne liste


Pelican dispose d'une option permettant de limiter le nombre d'articles présentés sur chaque page.

DEFAULT_PAGINATION = 4

Avec cet exemple, la page d'accueil du site index.html ne doit comporter que les 4 derniers articles, les autres se trouvant dans index2.html, index3.html et ainsi de suite ...

Cependant, une majorité des thèmes présents sur le site Github de Pelican n'utilise pas la liste d'articles paginés mais la liste d'articles complète pour générer les pages. Ainsi, pour profiter de la pagination, il faut utiliser la boucle

{% for article in articles_page.object_list %}

au lieu de

{% for article in articles %}

Source : http://github.com/getpelican/pelican/issues/657

Ajouter un lien de navigation entre les pages


En fouinant un peu, j'ai découvert deux fonctions utilisables dans le gabarit : has_previous() et has_next(). On peut ainsi savoir si une page d'articles a des précédents ou des suivants. Ainsi, j'ai ajouter ça à la fin de chaque page:

{% if articles_page.has_next() or articles_page.has_previous()%}
    {% include 'pagination.html' %}
{% endif %}

Et le gabarit pagination.html copié sur des thèmes existants :

<div class="pagination">
    <ul>
        {% if articles_page.has_previous() %}
            {% set num = articles_page.previous_page_number() %}
            <li class="prev"><a href="{{ SITEURLu }}/{{ page_name }}{{ num if num > 1 else '' }}.html">&larr; Page précédente</a></li>
        {% else %}
            <li class="disabled"><a href="#">&larr; Page précédente</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">Page suivante &rarr;</a></li>
    {% else %}
    <li class="disabled"><a href="#">&rarr; Page suivante</a></li>
    {% endif %}
    </ul
</div>

Aucun commentaire