análise completa do modelo python Django

Este artigo primeiro apresenta o conhecimento básico do sistema de templates Django, depois discute como instalar e configurar o sistema de templates Django, depois analisa profundamente a estrutura básica dos templates Django, o uso de tags e filtros e explica como exibir dados de modelo em templates. Finalmente, use um exemplo de projeto real para demonstrar como usar o sistema de templates Django no desenvolvimento real.

Uma introdução ao sistema de templates Django

O sistema de templates Django é um componente poderoso que nos permite gerar dinamicamente texto estruturado como HTML e XML com base nos dados fornecidos. O sistema de modelos não é apenas fácil de usar, mas também rico em recursos. Inclui uma linguagem integrada: Django Template Language (DTL), uma linguagem simples e não intrusiva para definir a estrutura e lógica dos templates.

Por exemplo, em um template Django, podemos usar variáveis ​​e tags para gerar conteúdo dinamicamente:

# Django模板示例
{
   
   { book.title }} <!-- 输出: Python编程基础 -->
{% if user.is_authenticated %} <!-- 如果用户已登录 -->
  Hello, {
   
   { user.username }}! <!-- 输出: Hello, John! -->
{% endif %}

No código acima, chaves { { }}são usadas para gerar o valor da variável e rótulos {% %}são usados ​​para realizar operações lógicas.


A estrutura básica do modelo

Os modelos Django são arquivos de texto compostos por uma série de sintaxes especiais usadas para gerar dinamicamente HTML, XML ou outras linguagens de marcação. Vamos dar uma olhada mais de perto na estrutura básica dos templates do Django.

Sintaxe do modelo

Os modelos do Django usam principalmente duas sintaxes:

  • Variáveis : colocadas entre colchetes duplos ({ { }}). Por exemplo { { variable }}, o Django irá substituí-lo pelo valor da variável.
  • Tags : entre colchetes e sinais de porcentagem ({% %}). Tags fornecem estruturas de controle de modelo, como loops, instruções condicionais, etc. Por exemplo {% for item in list %}...{% endfor %}.

Herança de modelo

O sistema de templates Django suporta herança de templates. Este é um princípio de design DRY (Don't Repeat Yourself). Você pode definir um modelo base e permitir que outros modelos herdem esse modelo base e substituam determinadas partes dele.

Por exemplo, defina um modelo base base.html:

<!-- base.html -->
<html>
<body>
{% block content %}{% endblock %}
</body>
</html>

Em seguida, defina um submodelo child.htmlque herde base.htmle substitua contento bloco:

<!-- child.html -->
{% extends "base.html" %}

{% block content %}
<p>Hello, Django!</p>
{% endblock %}

Outros modelos

Além da herança, os modelos do Django também suportam a inclusão de outros modelos, o que pode ajudá-lo a dividir seus modelos em partes pequenas e reutilizáveis.

Por exemplo, defina um modelo header.html:

<!-- header.html -->
<header>
  <h1>Welcome to My Website</h1>
</header>

Em seguida, inclua este modelo em outro modelo:

{% include "header.html" %}

<p>This is the main content...</p>

Configurar modelos do Django

Configurando o sistema de templates Django

O sistema de templates Django está incluído nos projetos Django por padrão. Você pode settings.pyencontrar informações de configuração do modelo nos arquivos do projeto:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        ...
    },
]

Você pode 'DIRS'adicionar o caminho ao modelo no item de configuração. Por padrão, o Django templatesprocura arquivos de modelo no diretório de cada aplicativo.

Configurar método de carregamento de modelo

O sistema de templates Django pode carregar templates de vários locais. Por padrão, o Django templatesprocura arquivos de modelo no diretório de cada aplicativo. Você pode adicionar diretórios de modelos adicionais modificando opções TEMPLATESna configuração 'DIRS'. Por exemplo, você pode adicionar um diretório de modelo global:

# settings.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    },
]

Nesta configuração, todos os arquivos de modelo são templatesprocurados em pastas no diretório raiz do projeto.

Configurar mecanismo de modelo

Na TEMPLATESconfiguração, 'BACKEND'as opções são usadas para especificar qual mecanismo de modelo usar. O Django usa seu próprio mecanismo de template por padrão, ou seja django.template.backends.django.DjangoTemplates, . Você também pode mudar para outros mecanismos de modelo, como Jinja2:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        ...
    },
]

Observe que diferentes mecanismos de modelo podem exigir configurações diferentes e fornecer linguagens de modelo diferentes.

Configurar tags e filtros de modelos personalizados

Se você tiver tags e filtros de modelo personalizados, será necessário colocá-los em um templatetagsdiretório em um aplicativo. Em seguida INSTALLED_APPS, adicione o aplicativo na configuração e o Django carregará automaticamente suas tags e filtros de modelo personalizados:

# settings.py

INSTALLED_APPS = [
    ...
    'myapp',
    ...
]

Explicação detalhada das tags de modelo

Tags no sistema de templates do Django fornecem várias estruturas de controle, incluindo loops, instruções condicionais, herança de templates, etc. A seguir, apresentamos em detalhes algumas tags comumente usadas.

para etiqueta

forTags são usadas para percorrer sequências em modelos:

{% for item in item_list %}
    <p>{
   
   { item.name }}</p> <!-- 输出每个项目的名称 -->
{% endfor %}

se etiqueta

ifOs rótulos são usados ​​para julgamento condicional. Você pode usar elife elsepara realizar julgamento multiramal:

{% if user.is_authenticated %}
    <p>Welcome back, {
   
   { user.username }}.</p> <!-- 如果用户已经认证,打印欢迎信息 -->
{% else %}
    <p>Please log in.</p> <!-- 如果用户未认证,提示用户登录 -->
{% endif %}

estende tag e bloqueia tag

extendsTags são usadas para herança de modelos e blocktags são usadas para definir blocos que podem ser substituídos por submodelos:

<!-- base.html -->
<html>
<body>
{% block content %}{% endblock %}
</body>
</html>

<!-- child.html -->
{% extends "base.html" %}

{% block content %}
<p>Hello, Django!</p>
{% endblock %}

incluir etiqueta

includeTags são usadas para incluir outros modelos, tornando o modelo reutilizável:

{% include "header.html" %}

etiqueta de URL

urlTags são usadas para gerar URLs. Ele aceita o nome de uma função de visualização ou o nome de um padrão de URL, bem como parâmetros opcionais, e retorna o URL correspondente:

<a href="{% url 'home' %}">Home</a> <!-- 生成首页的URL -->

etiqueta csrf_token

Ao usar formulários POST, csrf_tokentags são usadas para gerar tokens CSRF para evitar ataques de falsificação de solicitação entre sites:

<form method="post">
{% csrf_token %}
<!-- 表单内容 -->
</form>

filtro de modelo

Nos templates do Django, os filtros podem modificar variáveis ​​antes que elas sejam exibidas. A sintaxe de um filtro é adicionar uma barra vertical (|) e o nome do filtro após o nome da variável. Se o filtro exigir parâmetros, eles poderão ser adicionados usando dois pontos (:). Vamos descobrir em detalhes.

Uso básico

Por exemplo, podemos usar datefiltros para formatar datas:

{
   
   { date_var|date:"F j, Y" }} <!-- 输出: July 8, 2023 -->

Use lowerum filtro para converter o texto em letras minúsculas:

{
   
   { "Hello World"|lower }} <!-- 输出: hello world -->

filtro de links

Você também pode encadear vários filtros e eles serão executados da esquerda para a direita:

{
   
   { "Hello World"|lower|capfirst }} <!-- 输出: Hello world -->

Filtros personalizados

Além de usar os filtros integrados do Django, você também pode criar os seus próprios. Para fazer isso, você precisa criar um arquivo Python em um diretório em um aplicativo templatetags, definir sua função de filtro nele e register.filterregistrá-lo com um decorador:

from django import template

register = template.Library()

@register.filter
def my_filter(value):
    # 这是一个简单的过滤器,它返回值的第一个字符
    return value[0]

Então você pode usar este filtro em seu modelo:

{
   
   { "Hello World"|my_filter }} <!-- 输出: H -->

Exibir dados do modelo no modelo Django

A estrutura Django separa os dados do modelo e as visualizações do modelo, o que nos permite exibir facilmente os dados do modelo em modelos. Na função view podemos consultar os dados do modelo e depois passá-los para o modelo. Nos modelos, usamos sintaxe especial para acessar e exibir esses dados.

Preparar dados na visualização

Digamos que temos um Blogmodelo que possui um titlecampo e um contentcampo. Em nossa função de visualização, podemos consultar todos os blogs:

from django.shortcuts import render
from .models import Blog

def blog_list(request):
    blogs = Blog.objects.all()  # 查询所有的博客
    return render(request, 'blog_list.html', {'blogs': blogs})

Exibir dados em modelos

Então, em nosso blog_list.htmlmodelo, podemos usar fortags para percorrer todos os blogs e usar sintaxe variável para exibir o título e o conteúdo de cada blog:

{% for blog in blogs %}
<h2>{
   
   { blog.title }}</h2>  <!-- 展示博客标题 -->
<p>{
   
   { blog.content }}</p>  <!-- 展示博客内容 -->
{% endfor %}

Use filtros para formatar dados

Nos modelos, também podemos usar filtros para formatar os dados do modelo. Por exemplo, podemos usar dateum filtro para formatar uma data ou truncatecharsum filtro para limitar o comprimento do texto:

{% for blog in blogs %}
<h2>{
   
   { blog.title }}</h2>
<p>{
   
   { blog.publish_date|date:"F j, Y" }}</p>  <!-- 使用date过滤器格式化发布日期 -->
<p>{
   
   { blog.content|truncatechars:100 }}</p>  <!-- 使用truncatechars过滤器限制内容长度 -->
{% endfor %}

Usando templates Django em projetos reais

O sistema de templates Django desempenha um papel importante no desenvolvimento real do projeto. Abaixo tomaremos um sistema de blog simples como exemplo para demonstrar como usar templates Django em projetos reais.

Etapa 1: Defina seu modelo

Primeiro, precisamos definir um modelo em nossa aplicação. Neste exemplo, definimos um Postmodelo para representar postagens de blog:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)  # 文章标题
    content = models.TextField()  # 文章内容
    pub_date = models.DateTimeField(auto_now_add=True)  # 发布日期

Etapa 2: criar uma visualização

A seguir, precisamos criar uma visualização para lidar com a solicitação do usuário. Nesta visualização podemos obter todos os posts do blog e passá-los para o modelo:

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()  # 获取所有的博客文章
    return render(request, 'blog/post_list.html', {'posts': posts})  # 将文章传递给模板

Etapa 3: Escreva o modelo

Podemos então criar um modelo para exibir a postagem do blog. Neste modelo, usamos fortags para percorrer todos os artigos e variáveis ​​para exibir o título e o conteúdo do artigo:

{% for post in posts %}
<h2>{
   
   { post.title }}</h2>
<p>{
   
   { post.content }}</p>
<p>Published on {
   
   { post.pub_date|date:"F j, Y" }}</p>
{% endfor %}

Etapa 4: configurar URLs

Por fim, precisamos urls.pyconfigurar a URL no arquivo para que os usuários possam acessar nossa view:

from django.urls import path
from . import views

urlpatterns = [
    path('posts/', views.post_list, name='post_list'),  # 当用户访问/posts/时,显示博客文章列表
]

Acima estão as etapas básicas para usar modelos Django em projetos reais. Através deste exemplo, podemos ver o poder e a flexibilidade do sistema de templates Django, que pode nos ajudar a criar páginas web dinâmicas rapidamente.

Acho que você gosta

Origin blog.csdn.net/davice_li/article/details/131758411
Recomendado
Clasificación