详解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日

相关文章

  • django:查询,反向查询

    先看模型: 大的分类(主表) class Category(models.Model): name = models.CharField(max_length=20, null=True) 小的分类(子表) class SmartCategory(models.Model): name = models.CharField(max_length=20, nu…

    Django 2023年4月13日
    00
  • Django实现自定义标签

    在Django中,标签(Tag)是一种用于添加动态数据和逻辑的模板语言。标签能够实现复杂的逻辑,并且使模板变得更加灵活。 Django提供了一些内置的标签,但是有时候我们需要自定义标签,以满足特定的需求。 Django提供了两种自定义标签的方式:简单标签和复杂标签。简单标签是没有结束标记的标签,而复杂标签有开始标记和结束标记。 简单标签 自定义简单标签只需要…

    Django 2023年3月12日
    00
  • 详解基于python-django框架的支付宝支付案例

    下面就详细讲解一下“详解基于python-django框架的支付宝支付案例”的完整攻略。 案例简介 本案例旨在使用Python Django框架实现支付宝支付功能。在本案例中,我们将使用Python Django创建并管理Web应用程序,同时使用支付宝API进行支付处理。整个案例将由两部分组成:创建并设置Python Django框架Web应用程序,以及使用…

    Django 2023年5月16日
    00
  • Django–用户认证组件auth(登录用-依赖session,其他用)

    一、用户认证组件auth介绍 二、auth_user表添加用户信息 三、auth使用示例 四、auth封装的认证装饰器 五、自定义 一、用户认证组件auth介绍 解决的问题: 之前是把is_login=True放在session里来判断用户是否登录之前的操作,在覆盖的时候有问题。例如两个用户先后登录,第一个用户key-value比较多,第二个key-valu…

    Django 2023年4月12日
    00
  • 用 Django 开发一个 Python Web API的方法步骤

    下面是用 Django 开发一个 Python Web API的方法步骤的完整攻略。 1. 创建 Django 项目 首先我们需要创建一个 Django 项目,打开控制台,输入以下命令: django-admin startproject project_name 其中,project_name 可以替换为你想要创建的项目名称。 2. 创建 Django A…

    Django 2023年5月16日
    00
  • django ORM 一对多, 多对多 查询 以及 结合Tamplate

    ORM 表结构;和管理员是多对多, 和 OS 是一对多 class hosts(models.Model): out_ip=models.CharField(max_length=32) in_ip=models.CharField(max_length=32) app=models.ForeignKey(App) login_user=models.Cha…

    Django 2023年4月9日
    00
  • Django之POST GET与前后端交互

    Django之META与前后端交互 1 提交表单之GET 前端提交数据与发送 1)提交表单数据 2)提交JSON数据 后端的数据接收与响应 1)接收GET请求数据 2)接收POST请求数据 3)响应请求 GET 请求过程 前端通过ajax发起GET请求,json格式数据 var data = { “name”: “test”, “age”: 1 }; $.a…

    Django 2023年4月10日
    00
  • 简介Django中内置的一些中间件

    针对这个话题,我给您提供以下完整的攻略: 简介Django中内置的一些中间件 Django是一个提供Web应用程序开发框架的Python框架。它提供了许多功能和工具,其中一项很重要的功能是中间件。Django中的中间件是可插拔的组件,可以自定义请求和响应的处理方法。在Django中,许多内置的中间件可用于快速实现常见的功能,同时也可作为参考使用自定义中间件的…

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