Ricerca…


Osservazioni

Utilizza processori di contesto per aggiungere variabili accessibili ovunque nei tuoi modelli.

Specificare una funzione, o funzioni che restituiscono le dict delle variabili desiderate, quindi aggiungere tali funzioni a TEMPLATE_CONTEXT_PROCESSORS .

Utilizzare un processore di contesto per accedere alle impostazioni.DEBUG nei modelli

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

oppure, per le versioni <1.9:

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

Quindi nei miei modelli, semplicemente:

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

Utilizzo di un processore di contesto per accedere alle voci del blog più recenti in tutti i modelli

Supponendo che tu abbia un modello definito Post definito nel tuo file models.py che contiene post di blog e che abbia un campo date_published .


Passaggio 1: scrivere il processore di contesto

Crea (o aggiungi a) un file nella tua directory app denominata 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

Passaggio 2: aggiungere il processore di contesto al file delle impostazioni

Assicurati di aggiungere il nuovo processore di contesto al file settings.py nella variabile TEMPLATES :

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

(Nelle versioni di Django precedenti alla 1.9, questo era impostato direttamente in settings.py usando una variabile TEMPLATE_CONTEXT_PROCESSORS .)


Passaggio 3: utilizzare il processore di contesto nei modelli

Non è più necessario passare più recenti post di blog attraverso le singole visualizzazioni! Basta usare recent_blog_posts in qualsiasi modello.

Ad esempio, in home.html puoi creare una barra laterale con link a post recenti:

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

Oppure in blog.html potresti creare una visualizzazione più dettagliata di ogni post:

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

Estendere i tuoi modelli

Processore di contesto per determinare il modello in base all'appartenenza al gruppo (oa qualsiasi query / logica). Ciò consente ai nostri utenti pubblici / regolari di ottenere un modello e il nostro gruppo speciale per ottenerne uno diverso.

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

Aggiungi il processore di contesto alle tue impostazioni.

Nei modelli, utilizzare la variabile definita nel processore di contesto.

{% extends site_template %}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow