Django 模板引擎 (四)

一、Django模板引擎

         一个强大的工具,用于在HTML页面中嵌入动态内容。它使用一种被称为Django模板语言(Django Template Language)的简单而强大的语法来处理模板。该模板语言使用”{% %}”进行标记,用于执行各种操作。

二、Django 提供标准的API

    Django 定义了一个标准的API,用于加载和渲染模板,而不考虑后端。加载包括为给定的标识符找到模板并对其进行预处理,通常是将其编译成内存中的表示形式。渲染是指将上下文数据插入模板,并返回结果字符串。Django内置的模板引擎包含模板上下文(亦可称为模板变量)、标签过滤器。

   内置的模板标签可以在Django源码(\django\template\defaulttags.py)里找到定义过程,每个内置标签都有功能注释和使用方法

2.1 表达式

(1)表达式标记

Django模板语言提供了一些内置的表达式,用于在模板中执行算术、逻辑和字符串操作。

<p>{{ 10 - 8 }}</p>
<p>{{ name|lower }}</p>
<p>{{ "Hello, " + name }}</p>

show.html 

 <ul>
        {# 变量使用 #}
        <li>{{ name }} &nbsp;</li>
        <li>{{ age }} &nbsp;</li>
        <li>{{ hobbys }} &nbsp;</li>
        <li>{{ hobbys.0 }} &nbsp;{{ hobbys.3 }}</li>
        <li>{{ address }} &nbsp;</li>
        <li>{{ address.hz }} &nbsp;{{ address.bj }}</li>
    </ul>

 

(2)过滤器(本质为函数)

它对模板变量进行一系列的转换和处理。我们可以在变量后使用管道符“|”来应用过滤器。

比如模板上下文的内容截取、替换或格式转换等。过滤器转换变量和标签参数的值。

语法:变量|过滤器:“参数”

show.html 

    <h2>过滤器</h2>
    {#  {{ var|过滤器 }}#}
    {#    作用: 在变量显示前修改#}
    <p>age={{ age }}</p>
    <p>age|add= {{ age|add:10 }}</p>
    {# add: +增加 or -减少 #}
    <p>age|add= {{ age|add:-10 }}</p> {# 控制数字的大小#}
    {#upper: 获取首字母的大写#}
    <p>name|first|upper= {{ name|first|upper }}</p>
    {#lower: 获取最后一个字母的小写#}
    <p>name|last|lower= {{ name|last|lower }}</p>
    {#title: 获取#}
    <p>name|title= {{ name|title}}</p>
     {#truncatechars: 获取截断字符串的个数,包含首不包含尾 #}
    <p>name|truncatechars= {{ name|truncatechars:4}}</p>

 view.py

def modata(request):
    data={
        'name':'liufang',
        'age':68,
 
    }
    #返回数据
    return render(request,template_name='show.html',context=data)

  效果:

 

(3)标签

标签是Django模板语言中的特殊命令,用于执行一些额外的操作,例如加载静态文件、获取URL等。

    <a href="{% url 'baidu' %}">Baidu</a>

url路径 

视图函数


#重定向 -直接跳转到页面
def baidu(request):
    # return  redirect("https://www.runoob.com/django/django-orm-1.html")
    return  redirect("https://www.baidu.com/")

效果: 

(4) 继承

  它属于标签,它是将每个模板文件重复的代码抽取出来并写在一个共用的模板文件中,其他模板文件通过继承共用模板文件来实现完整的网页输出。

 (1) 父模版

如果发现在多个模板中某些内容相同,那就应该把这段内容定义到父模板中。
标签 block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。为了更好的可读性建议给 endblock标签写上名字,这个名字与对应的 block名字相同,父模板中也可以使用上下文中传递过来的数据。

#父模板
def father(request):
    return render(request,template_name='father.html')

 father.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页</title>
    {# css #}
    {% block extcss %}
        <style type="text/css">
            li {
                {#list-style: none;#}
                line-height: 30px;
            }
        </style>
    {% endblock %}
</head>
<body>
<div>
    <h1>父模板页面</h1>
    {# 头部模块 #}
    {% block head %}

    {% endblock %}

    {# 主体模块 #}
    {% block content %}
        <div>
            <button>父模板按钮</button>
        </div>
    {% endblock %}

    {# 尾部模块 #}
    {% block foot %}

    {% endblock %}

    {# js #}
    {% block extjs %}

    {% endblock %}

</div>
</body>
</html>

 (2) 子模版

标签 extends:继承,写在子模板文件的第一行 {% block名称 %}
预留区域,可以编写默认内容,也可以没有默认内容 {% endblock名称 %}
子模版不用填充父模版中的所有预留区域,如果子模版没有填充,则使用父模版定义的默认值 {% extends “父模板路径” %}

#子模板
def son(request):
    return render(request,template_name='son.html')

son.html

{# 继承父模板 #}
{% extends 'father.html' %}
{# 使用头部模块 #}
{% block head %}
    <div>
        <h1>使用了头部模板</h1>
    </div>
{% endblock %}

{# 主体模块 #}
{# 默认情况下:子模板是会覆盖父模板的内容 #}
{# 如果想使用父模板不会覆盖,则需要使用:block.super #}

{% block content %}
    {{ block.super }}  {#继承父模板#}
    <div>
        <button>子模板按钮</button>
    </div>
{% endblock %}



 {# 尾部模块 #}
    {% block foot %}
         {# 导入其他模块 #}
        {% include "son2.html" %}
    {% endblock %}

son2.html

<ol>
    <li>MySQl</li>
    <li>Oracle</li>
    <li>DB2</li>
</ol>

2.2 控制流

 在Django模板中,”{% %}”标记可以用于控制模板的逻辑流程。

(1) If语句

    “{% if %}”标记用于根据条件来判断是否显示某个部分的内容。

较运算符:==、!=、<、>、<=、>=
布尔运算符:and、or、not
注意:运算符左右两侧不能紧挨着变量或常量,必须有空格

 show.html

 {# if标签-单支分支 #}
    {% if age < 18 %}
        <p>{{ name }} 未成年</p>
    {% endif %}

    {# if..else标签 #}
    {% if age < 18 %}
        <p>{{ name }} 未成年</p>
    {% else %}
        <p>{{ name }} 成年</p>
    {% endif %}

    {# if..elif...else标签-多支分支 #}
    {% if age < 18 %}
        <p>{{ name }} 未成年</p>
    {% elif age < 40  and age > 55 %}
        <p>{{ name }} 成年人</p>
    {% else %}
        <p>{{ name }} 老年人</p>
    {% endif %}

view.py 

#模板
def modata(request):
    data={
        'name':'liufang',
        'age':68,
        'hobbys':['basketball','game','movie','read book'],
        'address':{'sz':'深圳','bj':'北京','hz':'杭州'},
        'stars':[
            ['刘备','关羽','张飞'],
            ['曹操','许诸','典韦'],
            ['王昭君','貂蝉','西施','杨玉环'],
        ]
    }
    #返回数据
    return render(request,template_name='show.html',context=data)

 

  注释

(1){#单行注释#}

        {% comment %}

(2)这里是多行注释

        {% endcomment %}

(2)For循环

  “{% for %}”标记用于在模板中迭代一个集合,并反复渲染相应的部分。迭代过程中,我们可以使用特殊的变量来引用当前迭代的元素

{{ forloop.counter }} 可以取出迭代对象的序号,如列表,字典;

show.html 

 {#for标签 #}
    {% for hobby in hobbys %}
        <p>{{ hobby }}</p>
    {% endfor %}

    {#嵌套循环for标签 #}
    <table border="1" width="20%">
        {% for star in stars %}
            <tr>
                {% for st in star %}
                    <td>{{ st }}</td>
                {% endfor %}
            </tr>
        {% endfor %}
    </table>

 

(3)Include语句

    “{% include %}”标记用于在模板中包含其他模板的内容。这使得模板的组织更加模块化和可重用


 

四、总结:

     Django模板语言中的”{% %}”标记是控制逻辑流程和执行表达式的关键。它可以用于条件判断、循环迭代、包含其他模板、执行表达式和应用过滤器。通过合理地使用这些标记,我们可以轻松地在Django应用中生成动态的HTML页面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/205453.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)

文章目录 &#x1f680;前言&#x1f680;两段有趣的代码✈️typedef关键字 &#x1f680;指针数组&#x1f680;简易计算器的实现 &#x1f680;前言 基于阿辉前两篇博客指针的基础篇和进阶篇对于指针的了解&#xff0c;那么今天阿辉将为大家介绍C语言的指针剩下的部分&#…

计算机组成原理期中题库

计算机组成原理题目集 2.1 下面是关于计算机中存储器容量单位的叙述&#xff0c;其中错误的是 A. 最基本的计量单位是字节&#xff08;Byte&#xff09;&#xff0c;一个字节等于8bit B. 一台计算机的编址单位、指令字长和数据字长都一样&#xff0c;且是字节的整数倍 C. 最小…

零基础编程入门视频教程,零基础编程从哪学起,分享中文编程工具构件实例

零基础编程入门视频教程&#xff0c;零基础编程从哪学起&#xff0c;分享中文编程工具构件实例 1、零基础编程入门视频教程&#xff0c;系统化编程教程链接 https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 2、零基础编程从哪学起 建议初学…

多多跨境跑出高质量发展“加速度”,解锁拼多多Q3财报背后的王牌

互联网红利渐趋消退&#xff0c;用户拉新难度加大&#xff0c;这些现象也在表明过去电子商务依靠资本、流量快速增长的发展模式已经成为过去式。由高速发展转为高质量发展&#xff0c;在今天每一个经济体与宏观经济发展态势一般&#xff0c;发展的“质量”价值正在被放大开来。…

Zabbix“专家坐诊”第213期问答汇总

问题一 Q&#xff1a;Zabbix报错&#xff1a;Zabbix server is not running :the information displayed may not be current&#xff0c;是什么问题呢&#xff1f; A&#xff1a; 1、数据库软件问题导致导入的zabbix数据库不完整2、zabbix Server配置问题3、zabbix-server没…

超赞!让vue开发效率翻倍的工具分享

分享一个很实用的工具库 VueUse&#xff0c;它是基于 Vue Composition Api&#xff0c;也就是组合式API。支持在Vue2和Vue3项目中进行使用&#xff0c;据说是目前世界上Star最高的同类型库之一。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 它的初衷就…

2023.11.29 深度学习框架理解

2023.11.29 深度学习框架理解 对深度学习框架进行复习&#xff0c;选最简单的“三好学生”问题的四个变化&#xff0c;简要总结其具体思路。 深度学习一开始就是为分类问题研究的&#xff0c;因此其框架的设计都是基于分类的问题&#xff0c;虽然现在也已经演变为可以执行多种…

高效解决在本地打开可视化服务器端的tensorboard

文章目录 问题解决方案 问题 由于连着远程服务器构建模型&#xff0c;但是想在本地可视化却做不到&#xff0c;不要想当然天真的以为CTRLC点击链接http://localhost:6006就真能在本地打开tensorboard。你电脑都没连接服务器&#xff0c;只是pycharm连上了而已 解决方案 你需要…

1000多页!LeetCode刷题手册分享

这本手册确实是一部令人印象深刻的作品。&#xff08;手册链接在文末&#xff01;&#xff01;&#xff01;&#xff09; 首先&#xff0c;内容充实是这本手册的一大亮点。它涵盖了广泛的算法和数据结构主题&#xff0c;包括数组、链表、树、图、排序算法、动态规划等等。每个…

基于SpringBoot房产销售系统

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于房产销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了房产销售系统&#xff0c;它彻底改变了过去传统的…

自定义链 SNAT / DNAT 实验举例

参考原理图 实验前的环境搭建 1. 准备三台虚拟机&#xff0c;定义为内网&#xff0c;外网以及网卡服务器 2. 给网卡服务器添加网卡 3. 将三台虚拟机的防火墙和安全终端全部关掉 systemctl stop firewalld && setenforce 0 4. 给内网虚拟机和外网虚拟机 yum安装 httpd…

CityEngine2023 根据shp数据构建三维模型并导入UE5

目录 0 引言1 基本操作2 实践2.1 导入数据&#xff08;.shp&#xff09;2.2 构建三维模型2.3 将模型导入UE5 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;CityEngine专栏&#x1f4a5; 标题&#xff1a;CityEngine2023 根据shp数据构建三维模型…

麒麟操作系统进入单用户模式

Kylin V4 桌面版&#xff1a; 启动系统后&#xff0c;在启动菜单界面选择 Kylin 4.0.2 高级选项后回车。 在高级模式选项下选择第二行 recovery mode 模式后&#xff0c;按 e 编辑。 按 e 后如下图&#xff0c;找到 linux 开头的一行&#xff0c;修改 ro 为 rw 后&#xff0c…

浅聊langchain-chatchat

个人的一点经验和总结&#xff0c;希望能帮助到大家。有不对的地方请留言和指正&#xff01; langchain-GLM是什么 langchain-GLM是一个本地知识库应用解决方案&#xff0c;支持以cli、web、api方式提供以本地知识库或在线资源为知识素材的对话服务&#xff0c;对中英文场景对…

ESP32-Web-Server编程- 通过文本框向 Web 提交数据

ESP32-Web-Server编程- 通过文本框向 Web 提交数据 概述 前述章节我们通过简单 HTML、AJAX、Websocket、SSE 在网页上显示数据&#xff0c;通过网页上的按钮控制 ESP32 的行为。从本节开始&#xff0c;我们将进一步了解通过网页与 ESP32 进行交互的方法。 实现更复杂的交互功…

软件工程--需求工程--学习笔记(超详细)

软件需求工程是软件开发周期的第一个阶段&#xff0c;也是关系到软件开发成败最关键阶段&#xff0c;本章讲解需求的基础知识和需求工程的关键活动。这些知识对于结构化方法、面向对象方法、面向服务方法等都是适用的 本文参考教材&#xff1a;沈备军老师的《软件工程原理》 目…

ERP软件对Oracle安全产品的支持

这里的ERP软件仅指SAP ECC和Oracle EBS。 先来看Oracle EBS&#xff1a; EBS的认证查询方式&#xff0c;和数据库认证是一样的。这个体验到时不错。 结果中和安全相关的有&#xff1a; Oracle Database VaultTransparent Data Encryption TDE被支持很容易理解&#xff0c;…

什么是PDN的交流阻抗?

什么是PDN的交流阻抗&#xff1f; 在电力电子领域&#xff0c;PDN&#xff08;Power Distribution Network&#xff09;的交流阻抗是一个重要的概念&#xff0c;它反映了PDN在交流电源和负载之间传输电能的能力。了解PDN的交流阻抗对于优化电源设计、提高系统性能和可靠性具有重…

Linux 如何在文件中查找指定内容,grep的用法

Linux 如何在文件中查找指定内容 1、 如我们 查找 log_file_catalina.out 文件中&#xff0c;包含 ‘总数&#xff1a;900’ 的字符内容 2、 在日志中查看 83910_law_21CFBC7EB25B1FF60255FE7F4BE1BCCF1CE726F6_0.bdyhf 的相关内容 grep 83910_law_21CFBC7EB25B1FF60255FE7…

猜-MISC-bugku-解题步骤

——CTF解题专栏—— 题目信息&#xff1a; 题目&#xff1a;猜 作者&#xff1a;harry 提示&#xff1a; 解题附件&#xff1a;flag格式key{图中人物名字全拼} 解题思路&#xff1a; 这......头都没有&#xff0c;让我guess&#xff1f;&#xff1f;&#xff1f;详细信息看…