详解Python的Django框架中的模版相关知识

详解Python的Django框架中的模版相关知识

Django 是一个优秀的 Python Web 框架,内置了强大的模版引擎,方便开发者快速创建 Web 应用。本文将详细讲解 Django 中与模版相关的知识,包括模版的语法、模版继承和自定义模版标签等内容。同时,本文将提供两个示例来说明 Django 模版相关知识的应用。

模版的语法

Django 模版语言支持丰富的语法,既可以使用变量、标签,也可以使用条件控制语句和循环语句等。下面是一些常用的语法:

变量

使用双花括号 {{ }} 包含变量名,可以在模版中输出变量的值。

<p>{{ name }}</p>

标签

使用花括号与百分号 {% %} 包含标签名,可以在模版中使用系统提供的标签,例如 forifelse 等条件控制和循环语句。同时,Django 还提供了一些方便的标签,例如 extendsinclude 等。

{% for item in items %}
  <li>{{ item }}</li>
{% endfor %}

注释

使用花括号、百分号和井号 {% # %} 包含注释内容。

{% comment %}
  This is a comment.
{% endcomment %}

过滤器

变量也可以通过在后面加上管道符 | 和一个过滤器修改输出的内容。常用的过滤器有 upperlowerlength 等。

<p>{{ name|upper }}</p>

模版继承

模版继承是 Django 中一个非常重要的概念,它允许用户定义一个基础模版,并在子模版中重写部分内容,方便用户重用代码。下面是一个示例:

创建一个 base.html 文件,定义一个基础模版。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>{% block title %}Page Title{% endblock %}</title>
</head>
<body>
  <div class="container">
    {% block content %}
    {% endblock %}
  </div>
</body>
</html>

base.html 中定义了两个 block,分别是 titlecontent。使用 {% block %}{% endblock %} 来定义 block。

创建一个 page.html 文件,继承 base.html 并重写其中的某部分。

{% extends 'base.html' %}

{% block title %}
  My Page Title
{% endblock %}

{% block content %}
  <h1>Hello, World</h1>
{% endblock %}

page.html 中使用 {% extends %} 继承 base.html,并重写 titlecontent 的 block。这样,page.html 就继承了 base.html 的基础模版,并覆盖了其中的 titlecontent

自定义模版标签

Django 还允许用户自己定义模版标签,从而扩展模版引擎的功能。下面是一个示例:

创建一个 custom_tags.py 文件,定义一个自定义标签函数。

from django import template

register = template.Library()

@register.simple_tag
def hello():
    return "Hello, World!"

custom_tags.py 中定义了一个 hello 函数,并使用 @register.simple_tag 装饰器将其注册到模版引擎中。

在模版中使用这个自定义标签。

{% load custom_tags %}

<p>{% hello %}</p>

使用 {% load %} 标签加载自定义标签库,并使用 {% hello %} 标签调用自定义标签函数。

示例说明

示例 1

在一个电商网站中,需要对某些商品进行特殊标识,例如打折商品、新品上市等。为了方便管理,网站管理员将这些标识存储在数据库中,通过 Django 模版引擎来渲染页面。

在数据库中添加一个商品标识的表(item_flag),示例数据如下:

id name icon
1 打折商品 优惠
2 新品上市 新品

在 Django 中定义一个自定义标签 (get_item_flag) 来获取商品对应的标识。

@register.simple_tag
def get_item_flag(item_id):
    flag = ItemFlag.objects.filter(item_id=item_id).first()
    if flag:
        return flag.icon
    else:
        return ''

在模版中使用这个自定义标签和 Django 原生标签实现商品标识的显示:

{% load custom_tags %}
{% for item in items %}
  <div class="item">
    <p>{{ item.name }}</p>
    {% if item.price < 100 %}
      <p><span class="discount">{% get_item_flag item.id %}</span> {{ item.price }}</p>
    {% else %}
      <p>{{ item.price }}</p>
    {% endif %}
  </div>
{% endfor %}

以上代码中,{% get_item_flag item.id %} 标签获取商品对应的标识,并在 <span> 标签中显示。同时,原生标签 {% if %} 也使用来判断商品是否需要打折显示。

示例 2

在一个博客网站中,有不同的文章类型,例如技术文章、生活随笔等。每种文章类型需要有不同的侧边栏广告。为了方便管理,网站管理员将这些广告存储在数据库中,通过 Django 模版引擎来渲染页面。

在数据库中添加一个广告表 (ad),示例数据如下:

id type content
1 技术文章 技术资讯:5G进入全球商用
2 生活随笔 闲话家常:我家的小狗小猫

在 Django 中定义一个自定义标签 (get_ad) 来获取当前文章类型对应的广告。

@register.simple_tag(takes_context=True)
def get_ad(context):
    ad_type = context.get('ad_type')
    ad = Ad.objects.filter(type=ad_type).first()
    if ad:
        return ad.content
    else:
        return ''

在模版中使用这个自定义标签和 Django 原生标签实现对应类型广告的显示:

{% load custom_tags %}
{% block sidebar %}
  {% if article_type == '技术文章' %}
    <div class="ad">{{% get_ad ad_type='技术文章' %}}</div>
  {% elif article_type == '生活随笔' %}
    <div class="ad">{{% get_ad ad_type='生活随笔' %}}</div>
  {% endif %}
{% endblock %}

以上代码中,{% get_ad ad_type='技术文章' %} 标签根据广告类型获取对应的广告,并在 <div> 标签中显示。同时,原生标签 {% if %} 也使用来判断显示哪种类型广告。

总结

Django 模版是 Django 框架中非常重要的一部分,了解模版语法和模版继承等知识有助于开发高效、高质的 Web 应用。同时,自定义模版标签也是模版引擎功能扩展的一个必要手段,方便开发者进行更加定制化的需求实现。以上两个示例说明了使用 Django 模版的实际应用场景,同时展示了如何使用模版语法、继承和自定义标签等功能实现项目需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python的Django框架中的模版相关知识 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Python Django教程之模板的使用

    让我针对“Python Django教程之模板的使用”的完整攻略进行详细说明。 什么是Django模板 Django模板是Django框架中一种方便且灵活的方法,用于渲染文本模板。模板与网站开发中的视图函数和数据访问相结合,能够在服务器端生成动态网页。 Django模板引擎使用的是Django模板语言(DTL),它是一个基于HTML的模板引擎,并且添加了一些…

    Django 2023年5月16日
    00
  • 【服务后端】MySQL数据库与Django Models不一致问题解决

    1 背景 1.8 Django的APP目录下有makemigrations文件夹,这个文件夹中的文件误删除过,后面从其他电脑的工程目录中拷贝了过来。 进行了python manage.py makemigrations和python manage.py migrate操作。 由于前后的makemigrations的文件不一致,导致数据库中的字段与Django…

    Django 2023年4月13日
    00
  • django前端到后端一次简单完整的请求实例

      请求过程: 用户请求—〉django的路由系统—〉根据url不同分发到不同的views函数做对应处理—-〉返回html格式的字符串(需要动态请求的到数据库里面拿到数据迁入到html文件中)   一、django项目初始化 二、配置数据库,生成数据     三、配置url.py文件   四、配置views视图函数:   五、编程html文件: …

    Django 2023年4月12日
    00
  • 第一篇-Django建立数据库各表之间的联系(上)

    多表操作(一对多)   遇到的问题: 执行python manage.py makemigrations后报如下错误   TypeError: __init__() missing 1 required positional argument: ‘on_delete’ 这是外键导致的, 修改外键连接代码如标红部分。 class Book(models.Mod…

    Django 2023年4月11日
    00
  • Django中Forms的使用代码解析

    我来详细讲解一下“Django中Forms的使用代码解析”的攻略,包含两条示例说明。 一、什么是Django Forms Django Forms是用来收集并验证用户提交数据的工具,在Django中使用Forms可以方便地快速创建表单并进行表单的各项验证。Django Forms常用于与View视图函数一起配合使用,从而实现表单的各种处理功能。 二、Djan…

    Django 2023年5月15日
    00
  • 基于Django ORM、一对一、一对多、多对多的全面讲解

    基于Django ORM、一对一、一对多、多对多的全面讲解 什么是Django ORM Django是使用Python编写的一个开放源代码的Web应用程序框架,ORM(Object-Relational Mapping,对象关系映射)是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。在Django中,ORM是Django模型组件的核…

    Django 2023年5月16日
    00
  • Django 中 cookie的使用

    下面是详细讲解“Django 中 cookie 的使用”的完整攻略。 什么是 Cookie? 首先,我们需要了解什么是 Cookie。Cookie 是服务器存储在客户端计算机上的小文件,以便下次访问时,服务器可以在客户端计算机的浏览器中读取这些 Cookie 并且根据 Cookie 来识别客户端。在 Web 应用程序中,Cookie 通常用于记录用户跨越多个…

    Django 2023年5月16日
    00
  • Django执行指定脚本的几种方法

    在Django中,执行指定脚本有如下几种方法: 1. 使用 Django 的 manage.py 执行命令: Django框架提供了一个名为 “manage.py” 的工具,它能够轻松地管理 Django 项目。在项目根目录下,使用终端运行以下命令行: python manage.py shell < script.py 其中,<符号后面跟着要执…

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