Ce premier article sur les plugins Pelican est dédié à l’insertion de données avant traitement par les générateurs et templates.

Le code suivant peut être utilisé pour fournir des données aux Générateurs avant leur utilisations dans les templates jinja.

Par exemple, pour extraire des données à partir d’une base SQL ou NOSQL et les mettre à disposition de l’application.

Code repris de https://github.com/kura/pelican-githubprojects

from pelican import signals

class GithubProjects(object):
    def __init__(self, gen):
        self.settings = gen.settings
        self.content_by_user = {}
        self.process()

    def process(self):
        # exemple de process réalisé à l'initialisation de GithubProjects()
        # au stade: signals.article_generator_init 
        pass

    def defer_process(self, **params):
        # exemple de process réalisé au moment de l'utilisation par le générateur
        # au stade signals.article_generator_context
        pass

def initialize(gen):
    # Affecte l'attribut plugin_instance au générateur
    gen.plugin_instance = GithubProjects(gen)

def fetch(gen, metadata):
    # Utilise gen.plugin_instance pour ajouter du contenu dans le contexte
    # A disposition des générateurs et des templates

    gen.context['github_projects_user'] = gen.plugin_instance.content_by_user
    # OU
    gen.context['github_projects_user'] = gen.plugin_instance.defer_process()

def register():
    signals.article_generator_init.connect(initialize)
    signals.article_generator_context.connect(fetch)

Utilisation dans un template

{% if GITHUB_USER %}
    <h1>Projects</h1>
    {% for project in **github_projects** %}
        <h2>{{ project.name }} <sup>({{ project.language }})</sup></h2>
        <p>{{ project.description }}</p>
        <p>
            <a href="{{ project.homepage }}">Homepage</a>
            <a href="{{ project.github_url }}">GitHub</a>
        </p>
    {% endfor %}
{% endif %}

Pour en savoir plus sur les signaux Pelican

Stéphane RAULT


Commentaires

comments powered by Disqus