Templates em Detalhes - Templates Engines ¢â‚¬¢¢â‚¬“motores de templates¢â‚¬â€Œ s££o backendsque d££o suporte

  • View
    0

  • Download
    0

Embed Size (px)

Text of Templates em Detalhes - Templates Engines...

  • 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 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”

    oApresenta o conteúdo literal da variável “text” oConverte as quebras de linhas em tags

  • 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/

    https://docs.djangoproject.com/pt-br/2.2/ref/templates/builtins/