Version 2 (modified by 16 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:
- 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
- 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", )
Projetos novos não possuem a setting TEMPLATE_CONTEXT_PROCESSORS declarada por padrão. Porém, não a declare sem seus valores padrão (veja em http://www.djangoproject.com/documentation/settings/#template-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.