
Vamos começar com um exemplo sobre como criar uma variável "global" que fornece o endereço base de seu site. Explicamos como obter a essa url aqui. Depois de tudo que falamos, pode parecer que é algo complicado de ser feito, não é? Veja só. Criamos um arquivo na raiz do projeto chamado context_processors.py e colocamos o seguinte código dentro dele:
from django.utils.encoding import smart_str def global_vars(request): current_base_url = request.build_absolute_uri() return { 'url_base': smart_str(current_base_url), 'url_absoluta': ( smart_str(current_base_url) + smart_str(request.get_full_path()) ),}Falta um detalhe ainda, mas já deu pra notar que em nossos templates teremos as variáveis url_base, que vai armazenar o "domínio" (o endereço raiz) de seu site, e a variável url_absoluta, que vai armazenar a url da página atual. Qual o detalhe que falta? Especificar no settings.py que esse processador de contexto deve ser usado. Acrescente este código no seu settings.py:
... from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS TEMPLATE_CONTEXT_PROCESSORS += ( 'meu_projeto.context_processors.global_vars', ) ...Lembre-se de substituir o "meu_projeto" pelo nome correto do seu projeto, ou tudo que vamos conseguir serão mensagens de erro.
Corrigido isso, já está pronto! Vá em um dos seus templates e teste imprimir o conteúdo de uma dessas variáveis:
<!DOCTYPE html>
<head>
<title>Título da página - {{url_absoluta}}</title>
</head>
...
Claro que não precisamos parar por aí, podemos criar muitas outras variáveis. Só se lembre de criar variáveis que são realmente relevantes para o seu sistema. Pois, como são carregadas em todas as views, é um pouquinho mais de memória e processamento que serão utilizados. Não é muito, mas se não tomar cuidado pode acabar com a memória do seu servidor por carregar valores que são usados em poucas views. Lembre-se do nome da ferramenta: processador de contexto. Temos de nos ater ao que é relevante, útil e faz sentido no contexto de processar seus templates.
Bem, temos algumas outras variáveis também, como as para guardar as url de login, logout e cadastro, os pedaços da url, etc. URLs que costumo usar no template principal e facilita bastante colocá-las aqui:
from meu_projeto import settings as proj_set from django.utils.encoding import smart_str def base_vars(request): current_base_url = request.build_absolute_uri() return { 'MY_BASE_SITE_URL': proj_set.MY_BASE_SITE_URL, 'LOGIN_URL': proj_set.LOGIN_URL, 'SIGNIN_URL': proj_set.SIGNIN_URL, 'LOGOUT_URL': proj_set.LOGOUT_URL, 'url_base': current_base_url, 'url_relativa': request.get_full_path(), 'url_absoluta': ( smart_str(current_base_url) + smart_str(request.get_full_path()) ), 'mostrar_ads': current_base_url.find('http://localhost:') == -1 }
A variável MY_BASE_SITE_URL eu uso para armazenar a URL base do site quando ele já está pronto e não vai mais ser mudado de lugar.
Bem, por hoje é só pessoal!
Espero que isso os ajude tanto quanto me ajudou!
Nenhum comentário:
Postar um comentário