Suche…


Bemerkungen

Verwenden Sie Kontextprozessoren, um Variablen hinzuzufügen, auf die Sie überall in Ihren Vorlagen zugreifen können.

Geben Sie eine Funktion oder Funktionen , die Rückkehr dict s der Variablen , die Sie wollen, dann diese Funktionen hinzuzufügen TEMPLATE_CONTEXT_PROCESSORS .

Verwenden Sie einen Kontextprozessor, um auf Einstellungen.DEBUG in Vorlagen zuzugreifen

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

oder für Versionen <1.9:

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

Dann in meinen Vorlagen einfach:

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

Verwenden Sie einen Kontextprozessor, um auf Ihre neuesten Blogeinträge in allen Vorlagen zuzugreifen

Angenommen , Sie haben ein Modell namens Post definiert in Ihrer models.py - Datei , die Blog - Beiträge enthält, und hat eine date_published Feld.


Schritt 1: Schreiben Sie den Kontextprozessor

Erstellen Sie in Ihrem App-Verzeichnis eine Datei mit dem Namen context_processors.py (oder fügen Sie eine hinzu):

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

Schritt 2: Fügen Sie den Kontextprozessor Ihrer Einstellungsdatei hinzu

TEMPLATES Sie sicher, dass Sie Ihren neuen Kontextprozessor zu Ihrer Datei settings.py in der Variablen TEMPLATES :

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

(In Django-Versionen vor 1.9 wurde dies direkt in settings.py mit einer TEMPLATE_CONTEXT_PROCESSORS Variable festgelegt .)


Schritt 3: Verwenden Sie den Kontextprozessor in Ihren Vorlagen

Neue Blogeinträge müssen nicht mehr durch einzelne Ansichten geleitet werden! Verwenden recent_blog_posts einfach recent_blog_posts in einer beliebigen Vorlage.

In home.html Sie beispielsweise eine Seitenleiste mit Links zu den letzten Beiträgen erstellen:

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

Oder in blog.html Sie eine detailliertere Anzeige für jeden Beitrag erstellen:

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

Erweitern Sie Ihre Vorlagen

Kontextprozessor, um die Vorlage basierend auf der Gruppenmitgliedschaft (oder einer beliebigen Abfrage / Logik) zu bestimmen. Dies ermöglicht unseren öffentlichen / regulären Benutzern, eine Vorlage und unsere spezielle Gruppe eine andere zu erhalten.

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

Fügen Sie den Kontextprozessor Ihren Einstellungen hinzu.

Verwenden Sie in Ihren Vorlagen die im Kontextprozessor definierte Variable.

{% extends site_template %}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow