详解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项目创建到启动详解(最全最详细)

    下面我来详细讲解一下“Django项目创建到启动详解(最全最详细)”。 标题 Django项目创建到启动详解(最全最详细) 简介 Django是一个开源高级Web框架,用于Python编程语言。本文将会介绍如何创建一个Django项目并启动服务器。 步骤 安装Django 首先要在你的机器上安装Django,可以使用pip进行安装。 bash pip ins…

    Django 2023年5月16日
    00
  • Django使用DjangoUeditor教程

    文章目录 1、将下在DjangoUeditor解压2、将解压的文件夹复制到项目的根目录中,这里使用的是虚拟环境3、进入到DjangoUedior3-master文件下,执行离线安装命令 python setup.py install4、然后将DjangoUeditor3-master文件夹删除,避免影响项目结构5、执行pip list 查看是否安装成功,如果…

    Django 2023年4月13日
    00
  • [django]django model的查询和更新

    再分享Django系列的另外几篇文章:Django model select的各种用法详解:https://mp.weixin.qq.com/s/JVh4UnS2Tql9gUVaBSoGuADjango model update的各种用法介绍:https://mp.weixin.qq.com/s/B_aNB8Y8snbSVLURONZ4QgDjango配置C…

    Django 2023年4月10日
    00
  • Django的多层路由

    如果项目中只使用到了一个APP应用,完全可以避免使用多层路由,多层路由在项目里涉及到2个或多个APP时使用 所谓路由,简单来说,就是给项目路径分流。 比如有一个项目 webnet,下面使用到了两个应用程序 stu_sys 和 tea_sys,需要区分访问时 可以在各自的APP根目录新建urls文件夹,将自己下面的对应关系写入: 1 from django.c…

    Django 2023年4月12日
    00
  • 如何在django中添加日志功能

    在Django的应用程序中,添加日志功能是一个很好的实践,因为它可以帮助你更好地了解应用程序的运行情况,发现和调试问题。下面是完整的攻略,包括了添加日志的步骤和示例代码。 第一步:设置logging配置 在Django项目的设置中,需要设置logging配置,以便日志记录器能够写入日志文件。 LOGGING = { ‘version’: 1, ‘disabl…

    Django 2023年5月16日
    00
  • Django – 权限(4)- queryset、二级菜单的默认显示、动态显示按钮权限

    一、queryset   Queryset是django中构建的一种数据结构,ORM查询集往往是queryset数据类型,我们来进一步了解一下queryset的特点。 1、可切片   使用Python 的切片语法来限制查询集记录的数目。它等同于SQL 的LIMIT 和OFFSET 子句。   >>> Entry.objects.all()[…

    Django 2023年4月10日
    00
  • Django与MVC

    Django是遵循MVC设计模式的一个框架:MVC(Model,View,Controller);模型,视图,控制器:如图: Django其实是一个MTV的模型:(Model,Template,VIew)模型,模板,视图  

    2023年4月9日
    00
  • django认证系统 Authentication使用详解

    下面我将为您详细讲解“Django认证系统Authentication使用详解”的完整攻略,包含两条示例说明。 一、什么是Django认证系统? Django认证系统是一个内置于Django框架中的用户管理系统。它提供了用户认证、密码重置、用户注册等一系列功能,方便开发者快速实现认证与授权功能。 二、如何使用Django认证系统? 1. 配置认证系统 在se…

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