📜  django 渲染模板 - Python (1)

📅  最后修改于: 2023-12-03 14:40:47.503000             🧑  作者: Mango

Django 渲染模板

Django 是一款基于 Python 的 web 框架,它提供了很多有用的功能来开发高效、安全、易维护的 web 应用程序。其中之一就是模板引擎,它可以帮助我们更方便地编写、渲染 HTML 模板,从而生成响应内容。

本文将介绍 Django 中如何使用模板引擎进行渲染,包括模板语法、上下文处理器、继承和包含等高级应用。

模板语法

Django 的模板语法使用双花括号 {% %} 标记和单花括号 {{ }} 标记表示变量和标签。

以下是一些常用的模板标签和过滤器:

  • 如果语句: {% if %}{% endif %}
  • for 循环语句: {% for %}{% endfor %}
  • 块标签: {% block %}{% endblock %}
  • 继承标签: {% extends %}
  • 嵌套模板: {% include %}
  • {% url %}:生成 URL
  • {{ }}:表示要输出的变量
  • |:过滤器,在变量后面使用过滤器可以对变量进行修改

例如,以下是一个简单的模板:

<html>
  <head>
    <title>{{ title }}</title>
  </head>
  <body>
    {% if user.is_authenticated %}
      <p>Welcome, {{ user.username }}!</p>
    {% else %}
      <p>Please log in.</p>
    {% endif %}
  </body>
</html>

其中 {{ title }}{{ user.username }} 表示要输出的变量,{% if %} 语句用于根据用户是否登录显示不同的内容。

上下文处理器

上下文处理器是一种可选的 Django 组件,它可以向模板中添加额外的变量或上下文。每次渲染视图时都会运行上下文处理器,并将其返回的字典添加到模板上下文中。

下面是一个简单的示例:

def my_context_processor(request):
    return {'MESSAGE': 'Hello, world!'}

将上下文处理器添加到 context_processors 中:

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',
                'myapp.context_processors.my_context_processor',
            ],
        },
    },
]

现在,在模板中可以使用 {{ MESSAGE }} 输出 "Hello, world!"

继承和包含

Django 的模板还支持继承和包含。继承可以帮助我们重用模板并提高可维护性,而包含可以帮助我们将通用的模板块放在单独的文件中,方便复用。

继承通过 {% extends %} 标签实现,它可以让模板继承另一个模板的块,从而实现模板的重用和覆盖。

以下是一个示例:

<!-- base.html -->
<html>
  <head>
    <title>{% block title %}Default title{% endblock %}</title>
  </head>
  <body>
    {% block content %}{% endblock %}
  </body>
</html>
<!-- mytemplate.html -->
{% extends 'base.html' %}

{% block title %}
  My title
{% endblock %}

{% block content %}
  <p>My content goes here.</p>
{% endblock %}

在这个示例中,mytemplate.html 继承了 base.html,并覆盖了 titlecontent 块。

包含可以通过 {% include %} 标签实现,它允许我们将另一个模板的内容嵌入到当前模板中。

以下是一个示例:

<!-- item.html -->
<li>{{ item.title }}</li>
<!-- list.html -->
<ul>
  {% for item in items %}
    {% include 'item.html' %}
  {% endfor %}
</ul>

在这个示例中,list.html 引用了 item.html,并在 for 循环中动态生成多个 li 标签。

渲染模板

Django 使用 render() 函数来渲染模板,它需要传递 request 对象、模板名称和上下文变量,最后返回一个 HttpResponse 对象。

以下是一个示例:

from django.shortcuts import render

def my_view(request):
    context = {'title': 'My title', 'items': [{'title': 'Item 1'}, {'title': 'Item 2'}]}
    return render(request, 'mytemplate.html', context)

在这个示例中,我们定义了一个 my_view 视图函数,它将模板名称 mytemplate.html 和上下文变量 context 传递给 render() 函数,最后返回一个 HttpResponse 对象。

结论

Django 的模板引擎是一个非常强大的工具,它提供了丰富的语法和高级功能,可以帮助我们更方便地编写、渲染 HTML 模板。本文介绍了一些基本的语法和高级应用,希望能够对 Django 开发者有所帮助。