Django
Processeurs de contexte
Recherche…
Remarques
Utilisez des processeurs de contexte pour ajouter des variables accessibles partout dans vos modèles.
Spécifiez une fonction ou des fonctions qui renvoient dict
s des variables que vous voulez, puis ajouter ces fonctions à TEMPLATE_CONTEXT_PROCESSORS
.
Utiliser un processeur de contexte pour accéder aux paramètres.DEBUG dans les modèles
dans myapp/context_processors.py
:
from django.conf import settings
def debug(request):
return {'DEBUG': settings.DEBUG}
dans settings.py
:
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'myapp.context_processors.debug',
],
},
},
]
ou, pour les versions <1.9:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'myapp.context_processors.debug',
)
Ensuite, dans mes modèles, simplement:
{% if DEBUG %} .header { background:#f00; } {% endif %}
{{ DEBUG }}
Utiliser un processeur de contexte pour accéder à vos entrées de blog les plus récentes dans tous les modèles
En supposant que vous ayez un modèle appelé Post
défini dans votre fichier models.py
qui contient des billets de blog et un champ date_published
.
Etape 1: Ecrivez le processeur de contexte
Créez (ou ajoutez) un fichier dans le répertoire de votre application appelé context_processors.py
:
from myapp.models import Post
def recent_blog_posts(request):
return {'recent_posts':Post.objects.order_by('-date_published')[0:3],} # Can change numbers for more/fewer posts
Étape 2: Ajouter le processeur de contexte à votre fichier de paramètres
Veillez à ajouter votre nouveau processeur de contexte à votre fichier settings.py
dans la variable TEMPLATES
:
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'myapp.context_processors.recent_blog_posts',
],
},
},
]
(Dans les versions de Django antérieures à la version 1.9, cela était défini directement dans settings.py
utilisant une variable TEMPLATE_CONTEXT_PROCESSORS
.)
Étape 3: Utilisez le processeur de contexte dans vos modèles
Plus besoin de passer des entrées de blog récentes via des vues individuelles! Utilisez simplement recent_blog_posts
dans n'importe quel modèle.
Par exemple, dans home.html
vous pouvez créer une barre latérale avec des liens vers des publications récentes:
<div class="blog_post_sidebar">
{% for post in recent_blog_posts %}
<div class="post">
<a href="{{post.get_absolute_url}}">{{post.title}}</a>
</div>
{% endfor %}
</div>
Ou dans blog.html
vous pouvez créer un affichage plus détaillé de chaque article:
<div class="content">
{% for post in recent_blog_posts %}
<div class="post_detail">
<h2>{{post.title}}</h2>
<p>Published on {{post.date_published}}</p>
<p class="author">Written by: {{post.author}}</p>
<p><a href="{{post.get_absolute_url}}">Permalink</a></p>
<p class="post_body">{{post.body}}</p>
</div>
{% endfor %}
</div>
Extension de vos modèles
Processeur de contexte pour déterminer le modèle en fonction de l'appartenance à un groupe (ou de toute requête / logique). Cela permet à nos utilisateurs publics / réguliers d’obtenir un modèle et notre groupe spécial pour en obtenir un autre.
myapp / context_processors.py
def template_selection(request):
site_template = 'template_public.html'
if request.user.is_authenticated():
if request.user.groups.filter(name="some_group_name").exists():
site_template = 'template_new.html'
return {
'site_template': site_template,
}
Ajoutez le processeur de contexte à vos paramètres.
Dans vos modèles, utilisez la variable définie dans le processeur de contexte.
{% extends site_template %}