49 lines
1.6 KiB
TeX
49 lines
1.6 KiB
TeX
\chapter{Context Processors}
|
|
|
|
Mise en pratique: un \emph{context processor} sert \emph{grosso-modo} à
|
|
peupler l'ensemble des données transmises des vues aux templates avec
|
|
des données communes. Un context processor est un peu l'équivalent d'un
|
|
middleware, mais entre les données et les templates, là où le middleware
|
|
va s'occuper des données relatives aux réponses et requêtes elles-mêmes.
|
|
|
|
\begin{minted}{python}
|
|
# 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"]
|
|
),
|
|
}
|
|
\end{minted}
|
|
|
|
|
|
Ceci aura pour effet d'ajouter les deux variables \texttt{git\_describe}
|
|
et \texttt{git\_date} dans tous les contextes de tous les templates de
|
|
l'application.
|
|
|
|
\begin{minted}{python}
|
|
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"
|
|
],
|
|
},
|
|
},
|
|
]
|
|
\end{minted}
|