Introdução aos modelos do Django

Concluído

Os modelos são arquivos de texto que podem ser usados para gerar formatos baseados em texto, como HTML ou XML. Cada modelo contém alguns dados estáticos que são compartilhados em todo o site, mas também pode conter espaços reservados para dados dinâmicos. Os modelos contêm variáveis e tags que controlam o comportamento e o que aparecerá como a página final.

Vamos explorar como os modelos funcionam no Django.

Variáveis

As variáveis em um modelo se comportam como em qualquer outra linguagem de programação. Podemos usá-los para indicar um valor que é avaliado em tempo de execução.

O Django fornece uma maneira de exibir variáveis em um modelo usando a {{ }} sintaxe. Qualquer variável colocada dentro das chaves duplas é avaliada quanto ao seu conteúdo de texto e, em seguida, colocada no modelo. Se quiséssemos exibir o nome do cão, por exemplo, poderíamos usar {{dog.name}}.

A visualização passa variáveis para um modelo usando a render função, que exploraremos em um módulo posterior. Você pode passar valores e outros dados para um modelo, incluindo um QuerySet do Django ORM. Isso permite que você exiba dados do banco de dados para seu aplicativo.

Filtros

Os filtros são uma ótima maneira de controlar como os dados aparecem quando são solicitados em um modelo. Como os filtros já estão criados, eles fornecem uma maneira fácil de formatar dados sem ter que escrever nenhum código especial.

Por exemplo, digamos que temos que imprimir os nomes das raças de cães, e queremos ter certeza de que a primeira letra de cada nome está em maiúsculas.

{{ dog.name | capfirst }}

A variável está à esquerda do símbolo do tubo (|), e o filtro está à direita. Este é apenas um dos muitos filtros que você pode usar para manipular os dados quando estiver usando filtros de modelo Django.

Etiquetas

Você pode usar tags para executar loops, criar texto ou fornecer outros tipos de comandos para o mecanismo de modelo. As tags geralmente se assemelham à sintaxe do Python. Mas como eles são executados dentro do modelo (em vez de dentro do interpretador Python), você notará algumas pequenas diferenças na sintaxe. Sem a capacidade de confiar em abas como faríamos com o Python, cada instrução de bloco exigirá um arquivo end.

Podemos usar if instruções para lógica booleana e for loops para iteração. A sintaxe principal das if instruções tem a seguinte aparência:

{% if dogs %}
    <h2>There are {{ dogs | length }} ready for adoption!</h2>
{% else %}
    <h2>We have no dogs ready for adoption. Please check back later!</h2>
{% endif %}

Nota

A elif instrução é usada da mesma forma que elif em Python.

Da mesma forma, podemos usar um for loop para exibir os nomes de todos os cães em uma lista:

<ul>
    {% for dog in dogs %}
        <li>{{ dog.name }}</li>
    {% endfor %}
<ul>

Herança de modelo

Os modelos são usados para gerar o HTML que você deseja que o usuário veja ao usar seu aplicativo. As páginas em um aplicativo normalmente compartilham uma estrutura comum, onde a navegação pode estar à esquerda, um título está na parte superior e há uma folha de estilo consistente. Os modelos Django suportam estruturas compartilhadas por meio de herança.

Criar uma página pai

Criar uma página pai é o mesmo que criar qualquer modelo HTML do Django. Você fornece a estrutura externa e, em seguida, inclui {% block %} espaços reservados. Esses espaços reservados permitem que as crianças forneçam o conteúdo a ser colocado nesses espaços reservados.

Vamos criar uma página pai para importar uma folha de estilo, fornecer um título padrão e fornecer um cabeçalho que queremos exibir em todas as páginas:

<html>
<head>
    <link rel="stylesheet" href="site.css">
    <title>{% block title %}Shelter site{% endblock %}</title>
</head>
<body>
    <h1>Shelter site</h1>
    {% block content %}
    {% endblock %}
</body>
</html>

Criar uma página secundária

Podemos criar uma página filho a partir do pai usando a extends palavra-chave. Com essa palavra-chave, fornecemos o nome do arquivo HTML do modelo pai. Em seguida, usamos as instruções apropriadas {% block %} para adicionar o conteúdo específico a essa página.

{% extends "parent.html" %}

{% block title %}
Welcome to the Shelter site!
{% endblock %}

{% block content %}
Thank you for visiting our site!
{% endblock %}

Quando a página é exibida, ela tem a seguinte aparência:

<html>
<head>
    <link rel="stylesheet" href="site.css">
    <title>Welcome to the shelter site</title>
</head>
<body>
    <h1>Shelter site</h1>
    Thank you for visiting our site!
</body>
</html>

Observe como os espaços reservados são substituídos pelo conteúdo na página filho.

Nota

Para este exemplo, usamos texto estático. Como você verá, você também pode usar conteúdo dinâmico.