| 1 | = Como adicionar variaveis ao contexto = |
| 2 | |
| 3 | 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. |
| 4 | |
| 5 | Veja como fazer: |
| 6 | |
| 7 | 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: |
| 8 | |
| 9 | {{{ |
| 10 | from django.conf import settings |
| 11 | |
| 12 | def context_processors(request): |
| 13 | ret = {} |
| 14 | |
| 15 | ret['settings'] = settings |
| 16 | ret['variavel_da_sessao'] = request.session.get('variavel_da_sessao') |
| 17 | |
| 18 | return ret |
| 19 | }}} |
| 20 | |
| 21 | 2. Declare o módulo criado na setting TEMPLATE_CONTEXT_PROCESSORS do arquivo settings.py |
| 22 | |
| 23 | {{{ |
| 24 | TEMPLATE_CONTEXT_PROCESSORS = ( |
| 25 | "django.core.context_processors.auth", |
| 26 | "django.core.context_processors.debug", |
| 27 | "django.core.context_processors.i18n", |
| 28 | "django.core.context_processors.media", |
| 29 | "meu_projeto.context.context_processors", |
| 30 | ) |
| 31 | }}} |
| 32 | |
| 33 | Pronto. Agora você pode utilizar as variáveis '''settings''' e '''variavel_da_sessao''' em templates sem precisar declará-las todas as vezes. |
| 34 | |
| 35 | '''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: |
| 36 | |
| 37 | {{{ |
| 38 | from django.template import RequestContext |
| 39 | from django.shortcuts import render_to_response |
| 40 | |
| 41 | def minha_view(request): |
| 42 | return render_to_response( |
| 43 | 'videos/index.html', |
| 44 | locals(), |
| 45 | context_instance=RequestContext(request), |
| 46 | ) |
| 47 | }}} |
| 48 | |
| 49 | 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'''. |