Arquivo de Conteúdo estático em páginas

Django – Context Processors…

Posted in Django, Programação, Python, Tecnologia with tags , , , on 10 de julho de 2009 by fchevitarese

Bom, estava criando um site logicamente utilizando Django, e eis que surgiu um pequeno problema.

Todas as vezes que eu mudava de página, os itens que eu julguei que seriam “estáticos” simplesmente não apareciam!

Bom, procurei muito na internet até que encontrei a solução. Na realidade, é muito bom participar da lista de discussão pois, muitos usuários já experimentaram alguns problemas que nós estamos experimentamos. Portanto, não deixe de participar da lista … “LINK”

Estou fazendo este tuto com o intuito de facilitar a vida, tendo em vista que mesmo na lista, às vezes recebemos muitas informações desencontradas! Em pequenas proporções é claro!

Então, o que devemos fazer é, primeiramente, adicionar ao nosso settings.py  a configuração dos  TEMPLATE_CONTEXT_PROCESSORS.

Não vou explicar o que são estes kras, até porque, não é este o fim do tuto.

O meu ficou assim…

TEMPLATE_CONTEXT_PROCESSORS = (

django.core.context_processors.auth,

django.core.context_processors.debug”,

django.core.context_processors.i18n”,

django.core.context_processors.media”,

django.core.context_processors.request”,

PROJETO.utils.context_processor.estaticos_contex_processor”,

)

Onde “PROJETO” é o nome do meu projeto (rsrsrs), e “estaticos_context_processor” é o nome da minha função.
Como você pode ver, eu criei o arquivo context_processor.py dentro de uma pasta chamada utils, para melhor organização do projeto. Faça segundo a sua vontade, só não esqueça de corrigir na chamada acima ok.

Então crie logicamente o arquivo context_processor.py e vamos ao conteúdo do mesmo.

No meu caso, a função “estaticos_context_processor” busca os dados que realmente são estáticos em minha aplicação.

from projeto.menus.models import *

from projeto.principal.models import links, enquete, resposta

def estaticos_contex_processor(request):

listalinks = links.objects.filter(publicada = True).all().order_by(‘-data’)

lista = enquete.objects.filter(habilitada = True).all().order_by(‘-dataCriacao’)

menus = itensmenu.objects.filter(ativo = True).all().order_by(‘posicao‘)

return {

listalinks‘:listalinks,

lista‘:lista,

‘menus’:menus,

}

Meu projeto tem as aplicações menus, onde controlo todos os menus do site via admin, com as funcionalidades de habilitado, links, e posições de exibição, e na aplicação principal, tenho os links que são exibidos, as enquetes e suas respectivas respostas 😉

Então, eu retorno os itens encontrados para meu template, que ficou mais ou menos assim…
Estou colocando só a parte de exibição dos itens retornados ok.

Menus …

<ul>

{% for item in menus %}

<a href=”{{ item.url }}”>{{ item.nomeExibicao }}</a>

{% endfor %}

</ul>

<!–Links–>

<h3>Links</h3>

<ul>

{% block links %}

{% for link in listalinks %}

<li><a href=”{{ link.url}}” target=”_blank”>{{ link.titulo }}</a></li>

{% endfor %}

{% endblock %}

</ul>

<!–Fim links–>

<!–Enquetes–>

{% block enquetes %}

<div id=”news”>

<!– enquetes –>

<h3><u>Enquetes</u></h3><br>

{% for enquete in lista %}

<h6><strong>&nbsp; {{ enquete.pergunta|safe }}</strong></h6>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<h3>

<form action=”/voto/{{ enquete.id }}/voto/” method=”post” id=”enquete{{ forloop.counter }}”>

{% for opcao in enquete.resposta_set.all %}

<br />

<input type=”radio” value=”{{ opcao.id }}” />

<label for=”opcao{{ forloop.counter }}” style=”font-size:10px; font-face: Verdana;”>{{ opcao.opcao }}</label>

{% endfor %}

<br /><br />

<input type=”submit” value=”Votar” style=”font-size:11px; width:50px;”/>

</form>

</h3>

<br />

{% endfor %}

</div>

{% endblock %}

Agora em todas as páginas baseadas na base.html exibirão os conteúdos estáticos!

Espero que ajude alguém!

Abraços…