Django模板系统

yizhihongxing

Django 的模板系统是一个强大的工具,它提供了一种将数据和 HTML 页面分离的方法,从而让开发人员可以更容易地维护和修改代码。在本文中,我们将深入了解 Django 模板系统的各个方面,包括模板语法、模板继承和模板标签等。

模板语法

Django 模板系统使用类似于 Jinja2 的模板语法。模板语法的主要特点是使用双大括号 {% ... %} 和单大括号 {{ ... }} 来标记模板标签和变量。下面是一些常用的模板标签和变量:

模板标签

{% if ... %}:条件语句,如果条件为真,则执行其中的代码块。
{% for ... in ... %}:循环语句,遍历一个列表或 QuerySet 中的每个元素。
{% block ... %} 和 {% endblock %}:用于定义一个块,可以在模板继承中被子模板重写。
{% extends ... %}:模板继承语句,用于指定模板继承关系。
{% include ... %}:包含一个子模板。

模板变量

{{ var }}:将一个变量的值插入到模板中。
{{ var|filter }}:将一个变量的值通过一个过滤器进行处理。
{{ var.attribute }}:访问一个对象的属性。
在模板语法中,我们还可以使用管道符号 | 将一个变量的值传递给一个过滤器,例如:

{{ text|truncatewords:30 }}

这将使用 truncatewords 过滤器来截断 text 变量的值,只保留前 30 个单词。

模板继承

Django 模板系统的另一个重要特性是模板继承。模板继承可以让我们将重复的代码抽象到一个父模板中,并在子模板中继承它。通过模板继承,我们可以大大减少代码的重复性,提高代码的可维护性和可重用性。

在 Django 中,模板继承是通过 {% extends ... %} 标签来实现的。我们可以创建一个父模板,将其中的一部分代码抽象出来,并在子模板中通过 {% block ... %} 标签来重写它。例如:

<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Default Title{% endblock %}</title>
    {% block extra_head %}{% endblock %}
</head>
<body>
    <div class="container">
        {% block content %}
        <p>This is the default content.</p>
        {% endblock %}
    </div>
    {% block extra_footer %}{% endblock %}
</body>
</html>

在上面的代码中,我们定义了一个名为 base.html 的父模板。在其中,我们使用 {% block ... %} 标签定义了三个块:title、extra_head 和 content。这些块可以在子模板中被重写。

下面是一个示例子模板:

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

{% block title %}Child Title{% endblock %}

{% block extra_head %}
    <link rel="stylesheet" href="style.css">
{% endblock %}

{% block content %}
    <h1>Welcome to my website!</h1>
    <p>This is the content of the child template.</p>
{% endblock %}

在子模板中,我们通过 {% extends ... %} 标签来指定父模板,并通过 {% block ... %} 标签来重写父模板中的三个块。注意,在子模板中我们只需要定义需要重写的块,而不需要包含父模板中的全部内容。

当我们渲染 child.html 模板时,Django 将会先渲染父模板,然后将子模板中重写的块插入到父模板中相应的位置。最终的输出结果将是:

<!DOCTYPE html>
<html>
<head>
    <title>Child Title</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <h1>Welcome to my website!</h1>
        <p>This is the content of the child template.</p>
    </div>
</body>
</html>

模板标签和过滤器

Django 模板系统中还提供了一些内置的模板标签和过滤器,可以帮助我们更方便地处理数据和逻辑。下面是一些常用的模板标签和过滤器:

模板标签

  • {% url ... %}:生成一个 URL。
  • {% csrf_token %}:生成一个 CSRF token,用于防止跨站请求伪造。
  • {% static ... %}:生成一个静态文件的 URL。

模板过滤器

  • add:将两个数字相加。
  • date:将日期格式化为字符串。
  • default:如果变量不存在或为空,则使用默认值。
  • escape:将 HTML 特殊字符转义为实体。
  • truncatewords:将文本截断为指定单词数。
  • urlize:将 URL 自动转换为超链接。

我们可以在模板中使用这些标签和过滤器来处理数据和逻辑。例如,下面的代码使用 date 过滤器将一个日期格式化为字符串:

{{ post.published_date|date:"F j, Y" }}

这将把 post.published_date 转换为 February 22, 2022 这样的字符串。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django模板系统 - Python技术站

(0)
上一篇 2023年3月12日
下一篇 2023年3月12日

相关文章

  • Python Django 实现简单注册功能过程详解

    下面我将详细讲解“Python Django 实现简单注册功能过程”的完整攻略。本攻略分为以下几个部分: 创建 Django 项目和应用 安装、配置和使用 Django 自带的认证系统 自定义认证系统 实现简单注册功能 示例一:使用 Django 自带的认证系统实现注册和登录功能 示例二:自定义认证系统实现注册和登录功能 1. 创建 Django 项目和应用…

    Django 2023年5月16日
    00
  • Django笔记十二之defer、only指定返回字段

    本篇笔记为Django笔记系列之十二,首发于公号【Django笔记】 本篇笔记将介绍查询中的 defer 和 only 两个函数的用法,笔记目录如下: defer only 1、defer defer 的英语单词的意思是 延迟、推迟,我们可以通过将字段作为参数传入,可以达到在获取数据的时候指定不获取该字段数据,常用于一些 textfield 字段上。 假设我…

    2023年4月10日
    00
  • Python – Django – 母版和继承

    可以把多个页面相同的部分提取出来,放在一个母板里,这些页面只需要继承这个母板就好了 通常会在母板中定义页面专用的 CSS 块和 JS 块,方便子页面替换 定义块: {% block 名字 %} {% endblock %} views.py 中添加函数: from django.shortcuts import render, redirect, HttpR…

    Django 2023年4月10日
    00
  • 【Python web 开发】django rest framwork 的token 登录和原理

      背景: 有些接口比如提交订单,获取用户列表是要用到用户信息的,是要用户登录后才能进行的 用户登录在前后端分离系统中与我们之前基于模板template进行开发是有区别的 思考一个问题:为什么我们的django  rest framwork 会有登录和退出功能呢? 因为,这里有配置哦 这里有 login 和loginout,里面的 login 调用了logi…

    Django 2023年4月12日
    00
  • Django创建一个项目:

    安装Django后创建一个项目: 通过命令方式创建项目: 创建一个APP: App是django的组成部分;一个App代表一个模块,所有的URL请求的都是app来处理的。比如一个视频网站,里面有电影模块,电视剧模块,综艺模块,动漫模块;一个Django可以有多个模块,一个模块可以被不同的项目使用。 注意:添加app后需要在项目的setting中设置:(INS…

    2023年4月9日
    00
  • django 单表操作实例详解

    接下来我将为你详细讲解“django 单表操作实例详解”的完整攻略。 1. 操作表格 在 Django 中,我们可以通过模型类(Model)来操作数据库中的表格。下面是一些实例操作。 1.1 创建模型类 首先,我们需要在 Django 项目中创建一个模型类,用来描述我们要操作的数据库表格。比如,我们要创建一个名为Person的数据库表格,该表格有三个字段:i…

    Django 2023年5月16日
    00
  • 详解Django Meta元数据类属性解析

    在 Django 中,每个模型都包含一个名为 Meta 的内部类,该类允许我们声明有关模型的元数据。这些元数据可以用来控制模型的特定方面的行为,例如它们的排序,或者将模型转换为某个特定的格式。 下面是一些常见的 Django 元数据类属性及其含义: db_table db_table用于定义模型的数据库表名。如果没有指定,Django 使用模型类的名称和小写…

    Django 2023年3月13日
    00
  • Django显示可视化图表的实践

    我会详细讲解“Django显示可视化图表的实践”的完整攻略,同时提供两个示例说明。 概述 Django是一款流行的Python Web框架,可以用来开发各种类型的Web应用程序。本攻略主要讲述使用Django来显示可视化图表的实践,其中包括两个示例。 环境准备 在使用Django来显示可视化图表之前,需要准备相关的环境和工具。以下是环境准备的步骤: 安装Dj…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部