Sök…


Anmärkningar

Använd kontextprocessorer för att lägga till variabler som är tillgängliga var som helst i dina mallar.

Ange en funktion eller funktioner som returnerar dict för de variabler du vill ha och lägg sedan till dessa funktioner i TEMPLATE_CONTEXT_PROCESSORS .

Använd en kontextprocessor för att komma åt inställningar.DEBUG i mallar

i myapp/context_processors.py :

from django.conf import settings

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

i settings.py :

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

eller för versioner <1.9:

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

Sedan i mina mallar, helt enkelt:

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

Använda en kontekstprocessor för att komma åt dina senaste blogginlägg i alla mallar

Förutsatt att du har en modell som heter Post definierad i din models.py fil som innehåller blogginlägg och har ett date_published fält.


Steg 1: Skriv sammanhangsprocessorn

Skapa (eller lägg till) en fil i din context_processors.py heter 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

Steg 2: Lägg till kontextprocessorn i din inställningsfil

Se till att du lägger till din nya settings.py filen TEMPLATES variabeln TEMPLATES :

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

(I Django-versioner före 1.9, ställdes detta direkt i settings.py med en variabel TEMPLATE_CONTEXT_PROCESSORS .)


Steg 3: Använd kontextprocessorn i dina mallar

Du behöver inte skicka nya blogginlägg genom enskilda vyer längre! recent_blog_posts bara recent_blog_posts i valfri mall.

Till exempel i home.html du skapa en sidofält med länkar till senaste inlägg:

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

Eller i blog.html du skapa en mer detaljerad visning av varje inlägg:

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

Utöka dina mallar

Kontextprocessor för att bestämma mallen baserad på gruppmedlemskap (eller någon fråga / logik). Detta gör att våra offentliga / vanliga användare kan få en mall och vår speciella grupp få en annan.

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

Lägg till sammanhangsprocessorn i dina inställningar.

Använd variabeln som definieras i kontextprocessorn i dina mallar.

{% extends site_template %}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow