Flask框架三:flask模版的详细介绍

2023-11-13

1、jinja2模版过滤器

1.1模板内置的过滤器

{{想要过滤的对象|使用的是什么过滤方法([*args])}}
例如{{name|length}}:将返回字符串的长度,而jinja2的过滤器就相当于是定义了很类似于length这样的函数,我们可以根据这些函数的特定功能来过滤出自己想要的数据。
①html模板代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<p>{{username}}</p>
<p>{{age|abs}}</p>
<p>{{name|default('这个人很懒什么都没有留下')}}</p>
{% autoescape off %}
<p>{{es}}</p>
{% endautoescape  %}
<p>{{es|safe}}</p>
<p>{{books.1}}</p>
<p>{{books|first}}</p>
<p>{{books|first|length}}</p>
<p>{{books|last}}</p>
<p>{{books|length}}</p>
<p>{{books|replace('新值','老值')}}</p>
<p>{{books|truncate(length=3)}}</p>
<!--
abs返回一个数值的绝对值。
default如果当前变量没有值,则会使用参数中的值来代替。
safe和autoescape功能一样都是防止flask将html语义转义,让html标签正常显现,标记字符是安全的
flask模板会自动将<>等含有html语义的标签转义,防止页面发生冲突这时候就可以用autoescape来防止转义
first:返回一个序列的第一个元素。last:最后一个。length:序列长度。可复用
format:格式化字符串。例如以下代码{{ "%s" - "%s"|format('Hello?',"Foo!") }}将输出:Helloo? - Foo!
join(value,d='u'):将一个序列用d这个参数的值拼接成字符串。
int(value):将值转换为int类型。
float(value):将值转换为float类型。
lower(value):将字符串转换为小写。
upper(value):将字符串转换为小写。
replace(value,old,new): 替换将old替换为new的字符串,如果替换的字符不存在是不会报错的,但是也不会显示,只有语法层面报错了,才会再页面中报错。
truncate(value,length=255,killwords=False):截取length长度的字符串,最小长度为3,常用作文章的标题,显示的字符为length-3之后为...。
striptags(value):删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格。
trim:截取字符串前面和后面的空白字符。
string(value):将变量转换成字符串。
wordcount(s):计算一个长字符串中单词的个数。
-->
</body>
</html>

②python的py代码如下,引用的是上述的html文件

from flask import Flask, render_template

app = Flask(__name__)
@app.route('/')
def index():
    context = {
        'username': 'beiyue',
        'age': -18,
        'home': 'shanxi',
        'name': 'wcc',
        'es': "<script>alert('hello world')</script>",
        's': "alert('hello world')",
        'books':['python','php','java']
    }
    return render_template('index.html', **context)


if __name__ == '__main__':
    app.run(debug=True)

1.2自定义的过滤器

自定义一个过滤器实现,测试发表时间离当前时间有多久,模拟微信朋友圈发表动态的时间显示,几分钟之前、几小时之前、几天之前

from flask import Flask, render_template
from datetime import datetime

app = Flask(__name__)
@app.route('/')
def index():
    context = {
        'username': 'hello beiyue',
        'age': -18,
        'home': 'shanxi',
        'name': 'wcc',
        'es': "<script>alert('hello world')</script>",
        's': "alert('hello world')",
        'books':['python','php','java'],
        'now_time':datetime(2020,4,10,16,0,0)
    }
    return render_template('index.html', **context)
@app.template_filter('my_cut')
def cut(value):
    return value.replace('hello', '')
# handle_time是自定义的模板过滤器的名字
@app.template_filter('handle_time')
def handle_t(time):
    '''
    小于一分钟=>显示刚刚
    大于一分钟小于一小时=>显示xx分钟之前
    大于一小时小于二十四小时=>显示xx小时之前
    :param time:
    :return:
    '''
    if isinstance(time,datetime):
        now = datetime.now()
        timestamp = (now-time).total_seconds()  # 得到时间的总秒数
        if timestamp<60:
            return '刚刚'
        elif timestamp >=60 and timestamp <= 60*60:
            return '%s分钟之前'.format(int(timestamp/60))
        elif timestamp>=60*60 and timestamp<=60*60*24:
            return '%s小时之前'.format(int(timestamp/(60*60)))
        else:
            return '很久之前'
    else:
        return time


if __name__ == '__main__':
    app.run(debug=True)

2、控制语句

下面的例子有if和for两种例子,for语句无法使用continue和break,页面不会显示但是也不会报错
在这里插入图片描述
下面是定义tab键自动补全html代码的设置
在这里插入图片描述
在这里插入图片描述

3、宏和import语句

3.1宏

模板中的宏跟python中的函数类似,可以传递参数,但是不能有返回值,可以将一些经常用到的代码片段放到宏中,然后把一些不固定的值抽取出来当成一个变量,例如input标签,定义在宏中input就变成一个函数了,想调用的时候就可以直接调用,和input没有本质区别,显示都是一样的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% macro input(name, value='', type='text') %}
    <input type="{{ type }}", name="{{name}}", value="{{value}}">
    {% endmacro %}
<table>
    <tr>
        <td>用户名:</td>
        <td><input type="text"></td>
        <td>用户名:</td>
        <td>{{input('username')}}</td>
        <td>密码:</td>
        <td>{{input('password',type='password')}}</td>
        <td>按钮:</td>
        <td>{{input(value='提交',type='submit')}}</td>
    </tr>
</table>
</body>
</html>

3.2import语句

在真实的开发中,会将一些常用的宏单独放在一个文件(只能写在html里)中,宏中可以只写宏定义的函数,使用的时候,从文件中进行导入。直接import…as…,也可以from…import…或者from…import…as…,导入的时候是以templates作为根目录的,根据前文按照flask模板创建目录格式
①import…as…

{% import 'macro.html' as macro with context %}
 with context是将py文件中定义的变量字段引入到宏中显示,相当于传参
<tr>
    <td>用户名:</td>
    <td>{{ macro.input('username') }}</td>
</tr>

②from…import…或者from…import…as…

{% from "macro.html" import input %}
<tr>
    <td>密码:</td>
    <td>{{ input("password",type="password") }}</td>
</tr>

4、include和set语句

4.1include语句

同一页面跳转之间,头部标签还有尾部标签可能都是一样的,可以把这些重复的代码写在一个模板里面,想要使用的时候通过include来调用,避免代码的冗余,提高代码的复用性,这是基于flask的模板创建的基于templates模板写的绝对路径,要按照flask框架的结构书写代码才可以正确的使用
在这里插入图片描述

{% include 'commit/header.html' %}
        主体内容
{% include 'footer.html' %}
		主题内容

4.2set语句

如果在模板中定义了一个变量只能通过py文件来渲染,如果想要自定义变量则可以使用set语句,使用了这个即使py文件传过来变量值也不会渲染,只会显示模板中的变量

{% set name='beiyue' %}
<p>{{ name }}</p>  

此时name相当于全局修改变量,只要是name都会变成beiyue,可以通过with语句来创建一个内部的作用域,将set语句放在其中,这样创建的变量只在with代码块中才有效,如果两个变量名一样全局的不会影响局部,局部的会显示自定义的变量内容

{% with %}
    {% set age = 2 %}
    {{ age }}       2    
{% endwith %}
    {{age}}        22
{% with name = 'wccc' %}
	{{ name }}
{% endwith %}

一次只能定义一个变量,变量可以为字符串、字典、列表,但是定义多了会报错,如果想要定义多个变量,可以写多个set

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask框架三:flask模版的详细介绍 的相关文章

  • 【Stm32野火】:野火STM32F103指南者开发板烧写官方示例程序LCD无法点亮?LCD示例程序无法使用?

    项目场景 大家好 最近在使用野火STM32F103指南者开发板的时候发现官方的示例程序LCD驱动代码居然无法直接驱动LCD点亮 这让我百思不得其解 以下就是我的踩坑填坑的过程 希望对大家有所帮助 野火官方资料下载文档链接 野火STM32F1
  • 计算机核心期刊排名及投稿信息

    1 计算机学报 北京 中国计算机学会等 2 软件学报 北京 中国科学院软件研究所 3 计算机研究与发展 北京 中国科学院计算技术研究所等 4 自动化学报 北京 中国科学院等 5 计算机科学 重庆 国家科技部西南信息中心 6 控制理论与应用
  • [Python图像处理] 三十七.OpenCV直方图统计两万字详解(掩膜直方图、灰度直方图对比、黑夜白天预测)

    该系列文章是讲解Python OpenCV图像处理知识 前期主要讲解图像入门 OpenCV基础用法 中期讲解图像处理的各种算法 包括图像锐化算子 图像增强技术 图像分割等 后期结合深度学习研究图像识别 图像分类应用 希望文章对您有所帮助 如
  • 线程池源码分析(一)

    最近在阅读 阿里巴巴Java开发手册 的时候 书中有这么一段话 线程池这块理解不是很深 今天就抽时间重新学习一遍 对于书中的问题分析完成后答案便一目了然 创建线程池的一个方式 ExecutorService e Executors newF
  • 三维重建_COLMAP安装、使用和参数说明(翻译自官方文档)

    近期因为想要入选学校某位很厉害的老师的某个项目 布置的小任务就是先把colmap以及openMVS跑一跑 我就记录了一下学习的经过 一 Ubuntu上源码编译colmap 参考网址 https colmap github io instal
  • 单片机串口控制树莓派3B播放HDMI视频,omxplayer,

    使用树莓派3B通过HDMI播放视频 并且使用串口去控制播放哪个视频 1 问题解耦 单片机串口控制树莓派3B播放视频 树莓派播放视频 单片机串口传参控制树莓派 树莓派播放视频 树莓派播放视频 并且能用串口这种简单的通信方式去控制 应该是需要安
  • java实现写大量数据到文件中

    生成 txt文件 生成 csv文件 生成 xls文件 import java io BufferedWriter import java io File import java io FileOutputStream import java
  • 【缓存】缓存,这么用才真正达到缓存的效果

    1 概述 转载 https zhuanlan zhihu com p 62508629 一 什么是缓存 平常的开发项目中 多多少少都会使用到缓存 因为一些数据我们没有必要每次查询的时候都去查询到数据库 一个形象的比喻 数据库是人的身体 缓存
  • 序列比对算法-计算生物学

    1 序列比对指将两个或多个序列排列在一起 标明其相似之处 序列中可以插入间隔 通常用短横线 表示 对应的相同或相似的符号 在核酸中是A T 或U C G 在蛋白质中是氨基酸残基的单字母表示 排列在同一列上 这一方法常用于研究由共同祖先进化而
  • CSS 3D转换——transform 属性的 rotatex() 方法和 rotatey() 方法

    目录 CSS 3D转换 浏览器支持 转换属性 3D Transform方法 常用方法 rotatex 方法 rotatey 方法 结语 CSS 3D转换 CSS3 允许我们使用 3D 转换来对元素进行格式化 浏览器支持 表格中的数字表示支持
  • 无线局域网下的远程控制、文件传输以及代理设置[Windows

    需求 在同一个路由器连接的局域网下 Ubuntu通过Windows端上网 Windows端远程控制Ubuntu系统 主机 Windows10 被操控端 Ubuntu18 04 在Windows方下载一个客户端 如Termius 远程控制和操
  • sql注入(报错注入)适用于union无法使用的情况

    extractvalue函数原理 这是一个对xml文件进行查询的函数 它的作用是 会从目标xml文件中返回所包含查询值的字符串 标准语法为 extractvalue XML document Xpath string extractvalu
  • for循环实现1-100之间偶数和

    package com itheima 04 需求 求出1 100之间偶数和 分析 A 定义求和变量 初始化值是0 B 获取1 100之间的数据 用for循环实现 C 把获取到的数据进行判断 看是否是偶数 如果是 就累加 D 输出求和结果
  • kernel:关于linux内核重要文件的基本描述

    linux Makefile 文件 这个Makefile文件的主要作用是指示make程序最终使用独立编译连接成的tools 目录中的build执行程序将所有内核编译代码连接和合并成一个可运行的内核映像文件 image 具体是对 boot 中
  • 协处理器cp15

    CP15访问CP15寄存器的指令 在基于ARM的嵌入式应用系统中 存储系统通常是通过系统控制协处理器CP15完成的 ARM处理器使用协处理器CP15的寄存器来控制cache 极高速缓存 TCM 高速缓存 和存储管理 CP15包含16个32位
  • anaconda的安装和常用指令

    1 下载anaconda之后 首先打开anaconda prompt 输入 conda version获取当前anaconda的版本 有可能会出现 首先要清理所有的包 conda clean packages tarballs 可以Win

随机推荐

  • 如何控制Spring bean的生命周期

    先了解下Spring bean的生命周期 创建 初始化 销毁 这对读懂Spring源码十分有帮助 控制Spring bean的生命周期有3种方式 下面分别用代码展示 方式一 Bean 注解上手动指定bean的初始化方法和销毁方法 Confi
  • 操作系统 存储管理 分页分段

    操作系统 存储管理 分页分段 分页存储管理 是将一个进程的逻辑地址空间分成若干个大小相等的片 称为页面或页 并为各页进行编号 从0开始 分页地址中的地址结构如下 页表实现了从页号到物理块号的地址映像 通过查找该表 即可找到每页在内存中的物理
  • c语言在线翻译器,【C语言】【window】--在线翻译器.doc

    C语言 Windows 在线翻译器 01 程序简介 程序名称 编译器 vs2010 其它也可以 程序大小 10K 文件包括 exe skinh she SkinH dll msvcr100 dll 程序界面 02 任务说明 光影队 任务 L
  • 自定义JSP中的Taglib标签之四自定义标签中的Function函数

    Java代码如下 自定义JSP中的Taglib标签之四自定义标签中的Function函数 package org lxh taglib import java util List public class FunctionTag publi
  • 报错"your evaluation license has expired, pycharm will now exit"

    1 修改C Windows System32 drivers etc hosts文件 将 0 0 0 0 account jetbrains com 添加到hosts文件的最后一行2 访问 http idea lanyus com 获取注册
  • NIO下载超大文件(支持20个G)

    服务端 nio将文件流写入response author zhanghp2017he foxmail com date 2022 8 22 param response return void exception RequestMappin
  • 【LeetCode75】第二十九题 删除链表的中间节点

    目录 题目 示例 分析 代码 题目 示例 分析 给我们一个链表 让我们把链表中间的节点删了 那么最直观最基础的办法是遍历两边链表 第一遍拿到链表长度 第二次把链表中间节点删了 这个暴力做法我没事过 不过貌似是可以解决问题的 所以我觉得这题的
  • React-router 5.0 利用高阶函数实现路由嵌套(web)

    如今 react router 已经升级到v5 0版本 v4 0版本做了较大的改革 代码中依然使用v3 0版本的写法 于是准备整改为v4 0以上版本 遇到了很多坑 于是做个笔记 首先 对比一下 v3 0 和 v4 0 版本 v4 0提供了r
  • librdkafka consumer封装的一点总结

    关于librdkafka producer可以看这里 consumer相较于producer需要注意的问题就少得多了 首先是初始化 string errstr unique ptr
  • 移植3- uboot之nandflash驱动移植

    2014 8 18 在上一篇文章中 我们已经将uboot启动起来了 但是如何将uboot spl搞到nandflash中去 这样可以拨动拨码开关选择nandflash启动 就可以从nandflash启动了呢 因此需要在uboot中实现nan
  • hooks api 详细demo

    本文所有代码demo https stackblitz com edit react hooks memo gwv9c6 file index js overview deep div How do React hooks really w
  • MYSQL group by后删除每个分组中的重复数据,只保留最新一条

    一 需求 MYSQL group by后删除每个分组中的重复数据 只保留最新一条 二 实现 获取 group by后每个分组中除去最新一条记录的其他重复数据 SELECT FROM test WHERE test user id IN 按照
  • 用python写一个猜数字小游戏

    需要用到python的random库来随机生成一个需要用户猜的数字 之后判断用户输入的数字 与生成的数字比较 并告知用户 先随机生成一个随机数 num random randint 1 49 随机生成一个1 49的数字 判断用户输入的数字
  • 数据结构-排序算法比较(内部排序)

    内部排序算法的比较 时间复杂度 最坏 最好 平均 注 直接插入 O n2 O n O n2 折半插入与之类似 冒泡 O n2 O n O n2 简单选择 O n2 与初态无关 希尔 O n1 3 具体不确定 快排 O n2 O nlog2n
  • transformer模型学习路线

    Transformer学习路线 完全不懂transformer 最近小白来入门一下 下面就是本菜鸟学习路线 Transformer和CNN是两个分支 因此要分开学习 Transformer是一个Seq2seq模型 而Seq2seq模型用到了
  • 字符串 验证回文串

    LC 验证回文串 Swift func isPalindrome s String gt Bool 字母转小写 let str s lowercased 去除标点等特殊字符 只留字母 let pattern a z let regex tr
  • WPF 控件库Live Charts 折线图多折线比较问题处理

    使用Live Charts功能对比多条折线时当Label不是一一对应时会发现折线无法对比如 Labels List
  • 指针和指针应用的区别

    转自 https www cnblogs com x wukong p 5712345 html http blog sina com cn s blog 673ef8130100imsp html 指针参数的传递 传递的是对指针的拷贝值
  • Ubuntu 笔记本麦克风没有声音解决方法

    1 查看你的声卡芯片型号在终端下 head n 1 proc asound card0 codec 获得型号 比如 gt proc asound card0 codec 0 lt Codec Realtek ALC272 gt proc a
  • Flask框架三:flask模版的详细介绍

    1 jinja2模版过滤器 1 1模板内置的过滤器 想要过滤的对象 使用的是什么过滤方法 args 例如 name length 将返回字符串的长度 而jinja2的过滤器就相当于是定义了很类似于length这样的函数 我们可以根据这些函数