English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O Django pode separar Python e HTML, código Python/As variáveis entram na vista e no template HTML. A conexão entre eles depende da função de renderização e da linguagem de template do Django.
Esta função tem três parâmetros -
Requisição - Inicialização da requisiçãoCaminho do Template - Este é o caminho relativo à variável no arquivo settings.py do projeto para a opção TEMPLATE_DIRS.Dicionário de Parâmetros - O dicionário contém todas as variáveis necessárias para o template. Essas variáveis podem ser criadas ou usadas através de locals() declaradas em todas as variáveis locais da vista.
Linguagem de Template do Django (DTL)
O motor de template do Django fornece um pequeno linguagem para definir a camada de aplicativo voltada para o usuário.
Exibir variáveis
A variável é exibida da seguinte forma: {{variable}}. O template é substituído pelas variáveis enviadas pelo parâmetro da função render da vista. Vamos mudar o hello.html para exibir a data de hoje:
hello.html
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: pt.oldtoolbag.com # Data: 2020-08-08 <html> <body> Hello World!!!<p>Hoje é {{today}}</p> </body> </html>
Então, nossa vista mudará para -
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: pt.oldtoolbag.com # Data: 2020-08-08 def hello(request): today = datetime.datetime.now().date() return render(request, "hello.html", {"today": today})
Agora, teremos a seguinte saída ao acessar a URL /myapp/hello após -
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: pt.oldtoolbag.com # Data: 2020-08-08 Hello World!!! Hoje é Set. 11, 2015
Como você pode ter notado, se a variável não for uma string, o Django usa o método __str__ para exibi-la; e seguindo o mesmo princípio, você pode acessar os atributos do objeto, como faria em Python. Por exemplo: se quisermos exibir o ano da data, a variável aqui é: {{today.year}}.
Eles podem ajudar a exibir variáveis modificadas. A estrutura do filtro é a seguinte: {{var|filters}}.
Um exemplo simples -
{{string|truncatewords:8O filtro corta a string, então você só vê a parte inicial80 caracteres.
{{string|lower}} − Converte caracteres para minúsculas {{string|escape|linebreaks}} − Escapa o conteúdo da string, então converte quebras de linha em tags.
Também pode ser configurado um valor padrão para variáveis.
As tags podem executar as seguintes operações: condição if, loop for, herança de template e mais.
Como no Python, você pode usar if, else e elif em templates −
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: pt.oldtoolbag.com # Data: 2020-08-08 <html> <body> Hello World!!!<p>Hoje é {{today}}</p> Nós somos {% if today.day == 1 %} o primeiro dia do mês. {% elif today == 30 %} o último dia do mês. {% else %} Eu não sei. {% endif %} </body> </html>
Neste novo template, com base na data do dia, o template apresentará este valor.
Como no 'if', temos o 'for' tag, que é usado completamente como no Python. Vamos mudar a lista de vistas hello enviada para nosso template −
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: pt.oldtoolbag.com # Data: 2020-08-08 def hello(request): today = datetime.datetime.now().date() daysOfWeek = ['Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb', 'Dom'] return render(request, 'hello.html', {'today': today, 'days_of_week': daysOfWeek})
Este template é usado para exibir listas −
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: pt.oldtoolbag.com # Data: 2020-08-08 <html> <body> Hello World!!!<p>Hoje é {{today}}</p> Nós somos {% if today.day == 1 %} o primeiro dia do mês. {% elif today == 30 %} o último dia do mês. {% else %} Eu não sei. {% endif %} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} </body> </html>
Deveríamos obter o conteúdo de saída conforme a seguir −
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: pt.oldtoolbag.com # Data: 2020-08-08 Hello World!!! Hoje é Set. 11, 2015 Nós somos, eu não sei. Seg Ter Qui Qui Sex Sáb Dom
Tags de bloco e extensão
O sistema de template é uma herança de template incompleta. Quando você projeta o significado do template, o template filho preenche o template pai conforme necessário, como uma aba selecionada em uma página pode precisar de CSS especial.
Vamos modificar o template hello.html para herdá-lo de main_template.html.
main_template.html
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: pt.oldtoolbag.com # Data: 2020-08-08 <html> <head> <title> {% block title %}Título da Página{% endblock %} </title> </head> <body> {% block content %} Content do corpo {% endblock %} </body> </html>
hello.html
# Filename: example.py # Copyright: 2020 By w3codebox # Author by: pt.oldtoolbag.com # Data: 2020-08-08 {% extends "main_template.html" %} {% block title %}Minha Página de Olá{% endblock %} {% block content %} Hello World!!!<p>Hoje é {{today}}</p> Nós somos {% if today.day == 1 %} o primeiro dia do mês. {% elif today == 30 %} o último dia do mês. {% else %} Eu não sei. {% endif %} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} {% endblock %}
No exemplo acima, ao chamar /myapp/hello, ainda obteremos o mesmo resultado que antes, mas agora estamos usando a extensão, sem a necessidade de reestruturar o código-−
Em main_template.html, definimos o uso de bloco de etiqueta. O bloco de barra de título conterá o título da página e o bloco de conteúdo estará no conteúdo principal da página. Ao usar a extensão de herança de Home.html a partir de main_template.html, usamos os bloco definidos acima (conteúdo e título).
As etiquetas de comentário são usadas para definir comentários em modelos, não comentários HTML, que não aparecerão na página HTML. Pode ser um arquivo ou apenas uma linha de código de comentário.