gwift-book/source/part-3-data-model/context_processors.adoc

1.5 KiB
Executable File
Raw Blame History

Context Processors

Mise en pratique: un context processor sert grosso-modo à peupler lensemble des données transmises des vues aux templates avec des données communes. Un context processor est un peu léquivalent dun middleware, mais entre les données et les templates, là où le middleware va soccuper des données relatives aux réponses et requêtes elles-mêmes.

# core/context_processors.py

import subprocess

def git_describe(request) -> str:
    return {
        "git_describe": subprocess.check_output(
            ["git", "describe", "--always"]
        ).strip(),
        "git_date": subprocess.check_output(
            ["git", "show", "-s", r"--format=%cd", r"--date=format:%d-%m-%Y"]
        ),
    }

Ceci aura pour effet dajouter les deux variables git_describe et git_date dans tous les contextes de tous les templates de lapplication.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates"),],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                "core.context_processors.git_describe"
            ],
        },
    },
]