Zoeken…


Opmerkingen

Gebruik contextprocessors om variabelen toe te voegen die overal in uw sjablonen toegankelijk zijn.

Geef een functie of functies op die dict van de gewenste variabelen retourneren en voeg die functies vervolgens toe aan TEMPLATE_CONTEXT_PROCESSORS .

Gebruik een contextprocessor om toegang te krijgen tot instellingen. DEBUG in sjablonen

in myapp/context_processors.py :

from django.conf import settings

def debug(request):
  return {'DEBUG': settings.DEBUG}

in settings.py :

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'myapp.context_processors.debug',
            ],
        },
    },
]

of, voor versies <1.9:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'myapp.context_processors.debug',
)

Dan in mijn sjablonen, eenvoudig:

 {% if DEBUG %} .header { background:#f00; } {% endif %}
 {{ DEBUG }}

Een contextprocessor gebruiken om toegang te krijgen tot uw meest recente blogberichten in alle sjablonen

Ervan uitgaande dat u een model met de naam Post gedefinieerd in uw models.py bestand dat blogberichten bevat en een veld date_published heeft.


Stap 1: Schrijf de contextprocessor

Maak (of voeg toe aan) een bestand in uw app-directory met de naam 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

Stap 2: Voeg de contextprocessor toe aan uw instellingenbestand

Zorg ervoor dat u uw nieuwe contextprocessor toevoegt aan uw bestand settings.py in de variabele TEMPLATES :

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'myapp.context_processors.recent_blog_posts',
            ],
        },
    },
]

(In Django-versies vóór 1.9 werd dit rechtstreeks ingesteld in settings.py met behulp van een variabele TEMPLATE_CONTEXT_PROCESSORS .)


Stap 3: Gebruik de contextprocessor in uw sjablonen

U hoeft recente blogberichten niet meer door individuele weergaven te halen! Gebruik gewoon recent_blog_posts in elke sjabloon.

In home.html kunt u bijvoorbeeld een zijbalk maken met links naar recente berichten:

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

Of in blog.html kun je een meer gedetailleerde weergave van elk bericht maken:

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

Uw sjablonen uitbreiden

Contextprocessor om de sjabloon te bepalen op basis van groepslidmaatschap (of een query / logica). Hiermee kunnen onze openbare / vaste gebruikers een sjabloon krijgen en onze speciale groep een andere.

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

Voeg de contextprocessor toe aan uw instellingen.

Gebruik in uw sjablonen de variabele die in de contextprocessor is gedefinieerd.

{% extends site_template %}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow