Você está na página 1de 25

Templates em Detalhes

parte 1

Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)


Templates
• Como um framework Web, Django necessita ter
uma forma conveniente para gerar o resultado
(HTML)

• A abordagem mais comum é o uso de templates


Templates
• Um template (HTML)
§ contém partes estáticas (em HTML)
§ possui sintaxes especiais que descrevem como devem ser
inseridos conteúdos dinâmicos

• Mas, templates são arquivos de texto e podem


gerar como resultado qualquer formato baseado
em texto (HTML, XML, CSV, etc.)
Templates Engines
• “motores de templates” são backends que dão
suporte processamento de sintaxes específicas

• Duas engines são disponibilizados


§ DTL – Django Template Language (padrão)
§ Jinja2

• Também podem ser utilizadas engines de terceiros


§ Como por exemplo o Smarty
Configuração da Engine
• Configurado na sessão TEMPLATES da configuração

• Opção: django.template.backends.jinja2.Jinja2
Configuração da Engine
• Parâmetros:
§ DIRS – define a lista de pastas em que serão buscados os
arquivos de template, segundo a ordem especificada
§ APP_DIRS – define onde serão buscados os templates
dentro das pastas de aplicações
§ OPTIONS – opções específicas da engine selecionada
Utilização de Templates
• O módulo django.template.loader define duas
funções para a carga de templates:
1. get_template(template_name, using=None)
o Carrega o template, retornando um objeto Template
o Lança TemplateDoesNotExist se não encontrar o mesmo
o Lança TemplateSyntaxError se não reconhecer a sintaxe
2. select_template(template_name_list, using=None)
o Funciona da mesma forma que o get_template(), com a diferença que
recebe uma lista de templates
o Testa um por um, na ordem, retornando o primeiro que encontrar
o Lança as mesmas exceções
Utilização de Templates
• O objeto Template que retornar deve prover o
método render()
§ Template.render(context=None, request=None)

• Atalho para carregar e renderizar um template:


§ render_to_string(template_name, context=None,
request=None, using=None)
§ O parâmetro using permite informar o nome da engine
Sintaxe da DTL
• Possui a estrutura de uma linguagem de marcação
§ As construções são identificadas e interpretadas
• Variáveis:
§ Permitem a escrita de valores do contexto
§ São cercadas de {{ e }}
§ O ponto (.) permite o acesso a atributos da variável
Sintaxe da DTL
• Tags:
§ Adicionam “lógica” (controle de fluxo) na renderização
§ São cercadas de {% e %}

§ Algumas tags requerem marcação do início e fim


{% tag %} ... conteúdo ... {% endtag %}
Sintaxe da DTL
• Filtros:
§ Transformam valores de variáveis e argumentos de tags

§ Com o contexto à {'django': 'the web framework for


perfectionists with deadlines’}
§ Gera como saída:
The Web Framework For Perfectionists With Deadlines
Sintaxe da DTL
§ P.ex.: Faz com que o valor de “name” seja incluído
utilizando minúsculas

§ Podem ser aplicados em “cascata”

o Apresenta o conteúdo literal da variável “text”


o Converte as quebras de linhas em tags <p>
Sintaxe da DTL
§ Os filtros também aceitam argumentos:
o Ex.1: formata a apresentação de uma data

o Ex.2: exibe apenas 30 caracteres da variável “bio”

• Comentários:
§ Permite adicionar comentários
Tags de Controle de Fluxo
• Principais – laços (for) e condicionais (if)

• Laço for
Tags de Controle de Fluxo
• Condicional if, elif e else
Herança de Templates
• DTL provê um mecanismo de herança de templates

• A proposta é que a construção aconteça sobre


algumas definições base (que são comuns)

• São definidos blocos – blocks – que podem ser


sobrescritos em extensões específicas

• Vejamos o exemplo da definição de uma base:


Herança de Templates
Herança de Templates
• Base, materializada em um arquivo “base.html”
• Um template especializado seria:
Herança de Templates
• Algumas dicas:
§ Se for utilizar {% extends %}, esta deve ser a primeira tag
§ Quanto mais blocos {% block %} melhor para organizar a
estrutura base de um template
§ Evitar replicar código, definindo blocos reutilizáveis
§ Para utilizar o conteúdo de um bloco definido em um
template base, é utilizada a variável {{ block.super }}
§ Variáveis criada fora de um bloco, com a tag “as”, podem
ser usadas dentro do bloco
Exemplo Completo
HTML Escaping Automático
• Problema: evitar a incorporação de texto que pode
alterar a forma como o HTML é apresentado

• Django provê a conversão de alguns elementos que


desmontam a estrutura de códigos HTML
§ < é convertido para &lt;
§ > é convertido para &gt;
§ ‘ (aspas simples) é convertida para &#39;
§ " (aspas duplas) é convertida para &quot;
§ & é convertido para &amp;
HTML Escaping Automático
• Como desligar o escaping automático:
§ Para variáveis individuais - filtro “safe”

§ Para blocos
HTML Escaping Automático
• A tag “autoescape off” passa o seu efeito para os
templates que herdarem de uma base
Acessando Métodos
• É permitido o acesso aos método dos objetos
anexados ao contexto de um template
§ Como por exemplo o acesso à coleções de objetos
relacionados através de chaves estrangeiras
Lista das Tags e Filtros Disponíveis
• Para ter acesso a lista completa das tags e e filtros
disponíveis na DTL, acesse a documentação:
§ https://docs.djangoproject.com/pt-
br/2.2/ref/templates/builtins/

Você também pode gostar