Templates em Detalhes -...

Preview:

Citation preview

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)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 &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/