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