Django
Procesadores de contexto
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 %}