Code


Version 1 (modified by marinho, 6 years ago) (diff)

--

Como adicionar variaveis ao contexto

Há outras formas de se adicionar variáveis ao contexto, mas usar Template Context Processors (TCPs) é a forma mais simples e adequada para se fazer isso.

Veja como fazer:

  1. Crie um módulo Python chamado context.py na pasta do projeto (o nome e o caminho são segundo o seu gosto, este é apenas um exemplo) com o seguinte conteúdo:
from django.conf import settings

def context_processors(request):
    ret = {}

    ret['settings'] = settings
    ret['variavel_da_sessao'] = request.session.get('variavel_da_sessao')

    return ret
  1. Declare o módulo criado na setting TEMPLATE_CONTEXT_PROCESSORS do arquivo settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "meu_projeto.context.context_processors",
)

Pronto. Agora você pode utilizar as variáveis settings e variavel_da_sessao em templates sem precisar declará-las todas as vezes.

Observação importante: os TCPs somente funcionam para response que o usem por padrão. Os contribs padrão do framework utilizam-no, o HttpResponse e similares também, mas para utilizá-lo com render_to_response é necessário adicionar sempre o parâmetro context_instance, como no exemplo abaixo:

from django.template import RequestContext
from django.shortcuts import render_to_response

def minha_view(request):
    return render_to_response(
            'videos/index.html',
            locals(),
            context_instance=RequestContext(request),
            )

O snippet em http://www.djangosnippets.org/snippets/821/ aponta uma forma ainda mais simples utilizar render_to_response sem que seja necessário sempre acrescentar a declaração de context_instance.