Configurando Templates no Django
A configuração de templates em um projeto Django é gerenciada pela variável TEMPLATES
no arquivo settings.py
. Por padrão, ela 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',
],
},
},
]
Essa variável contém uma lista de configurações específicas para cada template engine utilizada no projeto. Por padrão, há apenas uma configuração, com os seguintes componentes principais:
BACKEND
: Determina a template engine utilizada. O valor padrão é a engine interna do Django, django.template.backends.django.DjangoTemplates.DIRS
: Define uma lista de diretórios adicionais onde o Django deve buscar arquivos de template. Inicialmente, essa lista está vazia.APP_DIRS
: Especifica se o Django deve buscar arquivos de template nas pastas templates de cada aplicação registrada.OPTIONS
: Contém configurações adicionais, incluindo os processadores de contexto que serão aplicados durante o processamento dos templates.
Organização de Templates
Ao configurar APP_DIRS
como True
, o Django automaticamente busca arquivos de template na pasta templates
de cada aplicação registrada no projeto. Essa abordagem facilita a organização dos templates de forma modular, atribuindo arquivos específicos para cada aplicação, além de evitar conflitos de nomenclatura.
No entanto, para templates compartilhados entre várias aplicações, uma organização centralizada pode ser mais adequada. Um exemplo é a criação de uma pasta templates
no diretório principal do projeto. Essa pasta pode ser usada para armazenar templates globais ou comuns. Um exemplo básico de template global seria o arquivo index.html
:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django</title>
</head>
<body>
<h1>Hello www.programicio.com!</h1>
</body>
</html>
Suponha que o projeto seja chamado programicio
. A estrutura do diretório poderia ser representada assim:
programicio/ |-- templates/ | |-- index.html |-- __init__.py |-- asgi.py |-- settings.py |-- urls.py |-- wsgi.py hello/ |-- migrations/ |-- __init__.py |-- admin.py |-- apps.py |-- models.py |-- tests.py |-- views.py
Nesse caso, a pasta templates
no diretório raiz do projeto armazena arquivos que podem ser acessados por qualquer parte do sistema.
Configuração de Caminhos no settings.py
Para que o Django reconheça e utilize o template index.html
localizado na pasta templates
principal, o caminho dessa pasta precisa ser especificado no parâmetro DIRS
da variável TEMPLATES
. A configuração seria ajustada da seguinte forma:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
BASE_DIR / "programicio/templates",
],
'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',
],
},
},
]
Nesse exemplo, o caminho BASE_DIR / "programicio/templates"
é adicionado ao parâmetro DIRS
. A variável BASE_DIR
, definida no início do arquivo settings.py
, é responsável por determinar o diretório principal do projeto:
BASE_DIR = Path(__file__).resolve().parent.parent
Essa configuração instrui o Django a procurar templates adicionais no diretório especificado.
Renderização de Templates
O arquivo views.py
pode conter uma função que renderiza o template index.html
:
from django.shortcuts import render
def index(request):
return render(request, "index.html")
O arquivo urls.py
define a rota que mapeia a função index
:
from django.urls import path
from hello import views
urlpatterns = [
path("", views.index),
]
Quando a rota configurada é acessada no navegador, a função index
renderiza o conteúdo do arquivo index.html
. Isso exibe o template configurado, permitindo que ele seja utilizado como página inicial do projeto.
Documentação oficial: