Transcript
Page 1: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

Templates em Detalhes

parte 1

Prof. Fellipe Aleixo ([email protected])

Page 2: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

Templates

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

•A abordagem mais comum é o uso de templates

Page 3: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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.)

Page 4: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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

Page 5: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

Configuração da Engine

•Configurado na sessão TEMPLATES da configuração

•Opção: django.template.backends.jinja2.Jinja2

Page 6: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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

Page 7: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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

Page 8: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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

Page 9: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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

Page 10: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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 %}

Page 11: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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

Page 12: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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>

Page 13: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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

Page 14: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

Tags de Controle de Fluxo

•Principais – laços (for) e condicionais (if)

• Laço for

Page 15: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

Tags de Controle de Fluxo

•Condicional if, elif e else

Page 16: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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:

Page 17: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

Herança de Templates

Page 18: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

Herança de Templates

•Base, materializada em um arquivo “base.html”•Um template especializado seria:

Page 19: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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

Page 20: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

Exemplo Completo

Page 21: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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;

Page 22: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

HTML Escaping Automático

•Como desligar o escaping automático:§Para variáveis individuais - filtro “safe”

§Para blocos

Page 23: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

HTML Escaping Automático

•A tag “autoescape off” passa o seu efeito para os templates que herdarem de uma base

Page 24: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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

Page 25: Templates em Detalhes - diatinf.ifrn.edu.brdiatinf.ifrn.edu.br/prof/lib/exe/...templates_em_detalhes.pdf · Templates Engines •“motores de templates” são backendsque dão suporte

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/