Atualizado: 14/12/2024

Criação e Uso de Templates - Django

Os templates em Django são responsáveis por definir a apresentação de uma aplicação, permitindo incorporar dados diretamente no código HTML por meio de um sistema de sintaxe especializado. Este artigo aborda como configurar e utilizar templates em um projeto Django.

Imagine um projeto chamado programicio que contém uma única aplicação chamada hello. O arquivo settings.py do projeto gerencia as configurações de templates por meio da variável TEMPLATES.

Arquivo settings.py do projeto programicio

A variável TEMPLATES define como os templates serão processados e onde eles serão encontrados. Por padrão, apresenta a seguinte estrutura:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Configurações da variável TEMPLATES:

  • BACKEND: Especifica a template engine utilizada. O valor padrão é django.template.backends.django.DjangoTemplates, que é nativo do Django.

  • DIRS: Lista os diretórios onde o Django procurará por arquivos de template. Inicialmente, este valor é um array vazio.

  • APP_DIRS: Define se os templates serão procurados dentro da pasta templates de cada aplicativo. O valor padrão é True.

  • OPTIONS: Contém configurações adicionais, como os processadores de contexto, que facilitam o acesso a dados úteis dentro dos templates.

Essa configuração padrão já está preparada para encontrar templates dentro das pastas templates de qualquer aplicação. Por exemplo, criar uma pasta templates dentro da aplicação hello e adicionar um arquivo chamado index.html faz com que ele seja automaticamente localizado.

A estrutura básica do aplicação hello pode ser organizada da seguinte forma:

hello/
|-- migrations/
|-- templates/
|   |-- index.html
|-- __init__.py
|-- admin.py
|-- apps.py
|-- models.py
|-- tests.py
|-- views.py

No arquivo index.html, é possível definir um HTML básico como este:

<!DOCTYPE html>
<html>
<head>
    <title>Django no www.programicio.com</title>
    <meta charset="utf-8" />
</head>
<body>
    <h2>Hello www.programicio.com</h2>
</body>
</html>

No arquivo views.py, as funções de visualização (views) são configuradas para renderizar templates e retorná-los como resposta. Por exemplo:

from django.shortcuts import render

def index(request):
    return render(request, "index.html")

A função render recebe o objeto de requisição (request) e o caminho relativo do template, considerando a pasta templates.

No arquivo urls.py, a função index é vinculada a uma rota:

from django.urls import path
from hello import views

urlpatterns = [
    path("", views.index),
]
Estrutura de aplicação Django com templates

Após essas configurações, ao acessar a URL raiz da aplicação, o template index.html será exibido no navegador.

Navegador exibindo o template retornado pelo servidor Django

Trabalhando com Vários Templates

Para adicionar novos templates, como about.html e contact.html, basta criá-los na pasta templates:

hello/
|-- migrations/
|-- templates/
|   |-- index.html
|   |-- about.html
|   |-- contact.html
|-- __init__.py
|-- admin.py
|-- apps.py
|-- models.py
|-- tests.py
|-- views.py

Em views.py, novas funções de visualização são definidas para renderizar os novos templates:

from django.shortcuts import render

def index(request):
    return render(request, "index.html")

def about(request):
    return render(request, "about.html")

def contact(request):
    return render(request, "contact.html")

No arquivo urls.py, as novas visualizações são associadas às rotas:

urlpatterns = [
    path("", views.index),
    path("about/", views.about),
    path("contact/", views.contact),
]

Agora, as páginas about.html e contact.html estarão disponíveis nas URLs /about/ e /contact/.

Usando TemplateResponse

Além da função render, é possível utilizar a classe TemplateResponse para gerar respostas baseadas em templates. A funcionalidade é equivalente, mas TemplateResponse pode ser útil em situações onde a resposta precise ser modificada antes de ser enviada ao cliente:

from django.template.response import TemplateResponse

def index(request):
    return TemplateResponse(request, "index.html")

O resultado será o mesmo de render, mas com maior controle sobre o processo de resposta.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com