基于python的Flask web开发 三:jinja2控制语句和模板的使用与继承

jinja2是基于python的一种模板引擎,具有很高的安全性。(很抽象,但是不影响学习和使用)。

一、jinja2的控制和循环语句

和C,C++,java相比jinja2的控制和循环语句的格式有所不同。

控制语句: 循环语句:

{% if 表达式 %} {% for a in b %}

操作 操作

{% elif 表达式 %} {% endfor %}

操作

{% endif %}

下面是一段存在flask项目template目录下的html代码,用到了jinja2的控制语句和循环语句。

#control.html

    Can you get married?

    {% if age >= 22 %}
    you can get married!

    {% elif age < 21 %}
    you can't get married!

    {% else %}
    you can get married,after one year
    {% endif %}

         {% for hero in hero_name %}
         {{ hero }}
         {% endfor %}

{% for key,value in person.items()%}
    {{ key }}:{{ value }}
{% endfor %}

二、模板(template)

1.模板的简单使用——渲染界面

来说说模板template部分,现阶段我对模板的理解就是前端的html部分要放在模板中,然后在.py文件中引入render_template扩展包,然后通过render_template(“.html”)函数,来渲染界面。如果想要传变量给模板的化,先在函数中把变量定义字典,然后在render_template中 通过关键字context参数的方式获取,render_template(“模板名称.html”,**context)。想要传变量给模板的化,

先在函数中把变量定义字典,然后在render_template中 通过关键字context参数的方式获取,render_template(“模板名称.html”,**context),下面举一个例子。

#在url/control 下调用的视图函数,提供模板并且传入参数渲染界面
#control.html在上一段代码中
@app.route("/control",methods=['POST','GET'])
def control():
    context = {
        "age":20,
        'hero_name': ['1', '2', '3', '4'],
        "person":{"name":"lqm","age":20}
    }
    return render_template("control.html",**context)#传入变量

页面渲染出来的结果:

基于python的Flask web开发 三:jinja2控制语句和模板的使用与继承

也就是说content内部的变量传进了模板中,在模板html代码中也可以使用age、hero_name、person.item()。

2.模板的继承

这里的继承和面向对象里的继承是有差异的,模板的继承就是说这些模板(html代码、界面)有相同的部分,这些部分只需要写一份然后其他模板继承这些相同的部分然后去实现各自不同的部分就好,我们现在去实现多个界面有相同的底部和目录来加强对模板继承的理解。父类模板在实现这些多个界面都用的部分以后会为子模板提供实现特异性部分的入口,例如{% block head %}{% endblock %}实现特异性标题,{% block body %} {% endblock %}实现特异性文档主题部分,{% block title %}{% endblock %}实现特异性网页名称,再继承模板时在代码除注释的第一行写{% extends “*.html” %}用来继承父类模板,然后再实现特异性部分即可。

#base.html 父类模板的实现代码

    {% block title %}{% endblock %}
    {% block head %}{% endblock %}#子类实现特异性标题入口

        首页

        控制

        关于

{% block body %}{% endblock %}#子类实现特异性文档主体入口
flask

#control.html control子类模板代码实现
{% extends "base.html"%}

{% block title %}
      控制
{% endblock %}

{% block body %}
    {% if age >= 22 %}
    you can get married!

    {% elif age < 21 %}
    you can't get married!

    {% else %}
    you can get married,after one year
    {% endif %}

         {% for hero in hero_name %}
         {{ hero }}
         {% endfor %}

{% for key,value in person.items()%}
    {{ key }}:{{ value }}
{% endfor %}

{% endblock %}

首页界面效果图:

基于python的Flask web开发 三:jinja2控制语句和模板的使用与继承

控制界面效果图:

基于python的Flask web开发 三:jinja2控制语句和模板的使用与继承

Original: https://blog.csdn.net/qq_51740902/article/details/123386445
Author: FlowerCoding
Title: 基于python的Flask web开发 三:jinja2控制语句和模板的使用与继承

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/745605/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python3 Flask 多人答题(完整项目带源码与使用)

    TopQB答题系统 2020/01/05@pingfan 功能:1、多人同时答题系统2、在线查看个人得分与答题情况(解析)3、载入题库,随机抽取题目支持【单选题,多选题,判断题】4…

    Python 2023年8月14日
    054
  • drop()函数

    drop()函数的功能是通过指定的索引或标签名称,也就是行名称或者列名称进行删除数据。 第一个参数是label,就是要删除的索引或者列标签;可以写成df.drop(labels=[…

    Python 2023年8月1日
    047
  • yolov7数据集格式用于目标识别与实例分割

    介绍yolov7数据集格式之前,首先要了解mask rcnn使用的数据集格式。Mask rcnn采用数据集格式: 四个文件夹分别是: 掩码标签 label.png; 从labelm…

    Python 2023年10月10日
    077
  • Python空数组判断

    在使用numpy找到指定元素对应索引时,一般会使用numpy.argwhere()或numpy.where()函数。 正常使用numpy.argwhere()函数时,返回结果是元素…

    Python 2023年8月23日
    039
  • 模板语法之过滤器

    过滤器的作用 用来修改变量的输出结果 语法 {{变量名|过滤器1:’参数值1’|过滤器2:’参数值2}} <h1>&#x8F…

    Python 2023年6月9日
    071
  • Pytest接口自动化测试框架搭建模板

    项目目录结构 api – 模仿PO模式, 抽象出页面类, 页面类内包含页面所包含所有接口, 并封装成方法可供其他模块直接调用 config – 配置文件目录 data – 测试数据…

    Python 2023年9月11日
    037
  • 《头号玩家》AI电影调研报告(三)

    【 AR 市场正在迅猛增长】 据《工业增强现实现状2017》报告中所述,AR不再只是值得期待的新兴技术。2018年,投资此类技术已成为很多组织机构的关键战略,尤其是对于涉及复杂的制…

    Python 2023年10月27日
    026
  • 【jsp】符号含义

    eq 就是 EQUAL等于——${flag eq “123”}ne 就是 NOT EQUAL不等于 gt 就是 GREATER THAN大于lt 就是 LE…

    Python 2023年6月10日
    070
  • Django规范化编程2

    Task 4 Request获取对象并保存在数据库 (Add功能) def trying_add(request:HttpRequest): name = request.GET….

    Python 2023年8月5日
    048
  • python flask框架实例_Flask框架的一个小案例

    这个案例简单的实现了Flask框架的原理,运用python中的Flask框架从数据库中提取数据,前端页面运用echarts渲染 后端代码: from flask import Fl…

    Python 2023年8月13日
    051
  • 四种统计图代码

    Matplotlib 安装 本章节,我们使用 pip 工具来安装 Matplotlib 库,如果还未安装该工具,可以参考Python pip 安装与使用。 升级 pip: pyth…

    Python 2023年9月2日
    051
  • 用Python写一个微信提醒备忘录

    Original: https://www.cnblogs.com/123456feng/p/16141901.htmlAuthor: 蚂蚁ailingTitle: 用Python…

    Python 2023年11月3日
    027
  • NFT是什么?一篇文章搞懂NFT的概念

    NFT英文全称为Non-Fungible Token,翻译成中文就是:非同质化代币,具有不可分割、不可替代、独一无二等特点。 在区块链上,数字加密货币分为原生币和代币两大类。前者如…

    Python 2023年10月24日
    039
  • Python在线考试系统源代码

    Python在线考试系统,采用django框架开发,可微信登录,内含使用说明 。 系统环境 Linux发行版(Ubuntu16.04 / CentOS等) MySQL 5.5以上版…

    Python 2023年8月5日
    068
  • Ableton Live 11 Suite:强大的音乐创作软件

    Original: https://www.cnblogs.com/aurora-123/p/16733484.htmlAuthor: 佛系女孩Title: Ableton Liv…

    Python 2023年10月28日
    031
  • 字节微服务HTTP框架Hertz使用与源码分析|拥抱开源

    一、前言 Hertz[həːts] 是一个 Golang 微服务 HTTP 框架,在设计之初参考了其他开源框架 fasthttp、gin、echo 的优势, 并结合字节跳动内部的需…

    Python 2023年10月23日
    044
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球