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 %}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow