Trucs et astuces pour Pelican
24/06/2013 ⋅ Aucun commentaire
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">← Page précédente</a></li> {% else %} <li class="disabled"><a href="#">← 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 →</a></li> {% else %} <li class="disabled"><a href="#">→ Page suivante</a></li> {% endif %} </ul </div>