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)oCarrega o template, retornando um objeto Templateo Lança TemplateDoesNotExist se não encontrar o mesmoo 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 templateso Testa um por um, na ordem, retornando o primeiro que encontraro 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”
oApresenta o conteúdo literal da variável “text”oConverte 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 <§> é convertido para >§ ‘ (aspas simples) é convertida para '§" (aspas duplas) é convertida para "§& é convertido para &
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/
Top Related