Django – Template Tags …


Fiz a tradução deste artigo, sendo que o original pode ser encontrado em www.rossp.org
Tomei a liberdade de colocar somente o que achei pertinente na criação do templatetag, mas quem quiser ver o artigo original, pode clicar no link acima.

Django Template tags

Neste artigo vamos criar um template tag para mostrar a lista de tags dos posts do seu blog e também posts arquivados, separados por mês.
Isto se torna simples graças a um recurso existente no Django, chamado templatetags.

O conceito por trás do templatetags é simples. Um rápido trecho de código em sua página que chama um “script” Python por trás das cortinas e o mesmo retorna o código HTML puro, ou um conjunto de novas variáveis no contexto, permitindo manipulá-los e exibi-los como você quiser.

Vamos começar criando um diretório vazio dentro da pasta de sua aplicação, e vamos nomeá-lo “templatetags”. Supondo que você tenha uma aplicação denominada blog, você deve criar o diretório citado dentro da pasta blog. Também é necessário criar o arquivo “__init__.py” dentro da pasta “templatetags”.

Vamos também criar um arquivo chamado “listaposts.py” (Você pode dar o nome que quiser ok)

Agora, alguns passos são necessários.

  1. Importar os models desejados para que possamos ter acesso aos dados.
  2. Criar e registrar o nosso “templatetag”
  3. Escrever a função ou funções para esta tag, para adicionarmos os dados ao contexto.

Exemplificando o conteúdo do arquivo:

from projeto.blog.models import Post
from django.template import Library, Node

register = Library()
def lista_por_mes(parser, token):
    """
        {% get_month_list %}
    """
return MonthMenuObject()

class MonthMenuObject(Node):
    def render(self, context):
        context['lista_por_mes'] = Post.objects.dates("date", "month")
        return ''
register.tag('get_month_list', lista_por_mes)

Estamos então, registrando um templatetag “get_month_list”, que quando chamado no template, executa o “MonthMenuObject()”. O “Post.objects.dates” pega todos os posts e os separa por mês → “month” usando como comparativo o campo “date”.

Claro, estes campos e necessidades podem variar de acordo com seu models, portanto, faça as mudanças necessárias.
Agora, vamos colocar isto no template 😉

Não vou explicar nada sobre os templates aqui, somente vou mostrar como adicionar o templatetag que fizemos ao nosso template ok.
Como vamos exibir uma lista, então vamos utilizar o elemento “<ul>”.

<ul>

{% load listaposts %}

{% get_month_list %}

{% for month in lista_por_mes %}

<li><a href="/blog/{{ month|date:"Y/M"|lower}}/" title="{{ month|date:"M Y"}}">{{ month|date:"M Y" }}</a></li>

{% endfor %}

</ul>

Prontinho… No final, será exibida a lista como na imagem abaixo. Claro que você ainda tem que configurar os links que serão exibidos de acordo com suas urls 😉
Abraços!!!

9 Respostas to “Django – Template Tags …”

  1. Não imagina como esse artigo me ajudou.
    Sou iniciante no uso do Django e a cada dia me surpreendo ainda mais com o poder que possui essa ferramenta.

    Parabéns e sucesso!

  2. Obrigado pelo post, eu vou fazer agora, estava com dificuldades para criar os template tags que precisava, agora vou tentar seguir o seu exeplo, vlw e sucesso no blog.

  3. Eduardo Mendes those Says:

    Simples e pratico 🙂 gratz!

  4. Fala Fred, blz?
    Brigadão pelo post, consegui aplicá-lo em minhas páginas, mas não consegui carregar as template tags dentro das flatpages. É possível fazer isso? E de que forma?

    Vlw. 😉

    • Desconsidere o meu questionamento acima. Pequeno erro cometido e já resolvido.

      Mais uma vez obrigado pelo seu Blog. Estou iniciando os estudos com Django e cada vez mais me emplogando. Vlw =D

      • Que bom!!!
        Eu também gosto muito de Django e gostaria de dedicar um pouco mais de tempo ao blog.
        Mas infelizmente, nem sempre é do jeito que a gente quer né 😛

        Abraços!!!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: