Buscar..


Observaciones

Use procesadores de contexto para agregar variables que sean accesibles en cualquier parte de sus plantillas.

Especifique una función, o funciones que devuelvan dict de las variables que desea, luego agregue esas funciones a TEMPLATE_CONTEXT_PROCESSORS .

Utilice un procesador de contexto para acceder a settings.DEBUG en plantillas

en myapp/context_processors.py :

from django.conf import settings

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

en settings.py :

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

o, para las versiones <1.9:

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

Luego en mis plantillas, simplemente:

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

Uso de un procesador de contexto para acceder a las entradas de blog más recientes en todas las plantillas

Suponiendo que tiene un modelo llamado Post definida en su archivo models.py que contiene publicaciones de blog y tiene un campo de fecha de date_published .


Paso 1: Escribe el procesador de contexto

Cree (o agregue a) un archivo en el directorio de su aplicación llamado 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

Paso 2: Agrega el procesador de contexto a tu archivo de configuración

Asegúrese de agregar su nuevo procesador de contexto a su archivo settings.py en la variable TEMPLATES :

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

(En las versiones de Django anteriores a 1.9, esto se configuró directamente en settings.py utilizando una variable TEMPLATE_CONTEXT_PROCESSORS ).


Paso 3: Usa el procesador de contexto en tus plantillas

¡Ya no es necesario pasar entradas de blog recientes a través de vistas individuales! Solo usa recent_blog_posts en cualquier plantilla.

Por ejemplo, en home.html puede crear una barra lateral con enlaces a publicaciones recientes:

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

O en blog.html puede crear una visualización más detallada de cada publicación:

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

Extendiendo tus plantillas

Procesador de contexto para determinar la plantilla según la pertenencia al grupo (o cualquier consulta / lógica). Esto permite a nuestros usuarios públicos / regulares obtener una plantilla y nuestro grupo especial obtener una plantilla diferente.

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

Agregue el procesador de contexto a su configuración.

En sus plantillas, use la variable definida en el procesador de contexto.

{% extends site_template %}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow