flask基础之jijia2模板使用基础(二)
前言
在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的h5页面填充模板语言。而jijia2是一门十分强大的python的模板语言,是flask框架的核心模块之一。先简单介绍一下jijia2模板的用法。
系列文章
变量
模板可以说是直接展示给客户端的,那么在模板中有视图函数传递给模板的普通变量和可以直接使用的全局变量。
普通变量
- 变量的语法结构
<p>{{ bianliang }}</p> # 模板中的变量
{% if bianliang > 3 %} # 用来执行赋值或条件或判断语句
{# said something #} # 注释
- 变量对象的属性查找
bar.per # 先查找bar对象是否有per属性,再查找是否有per对象(如字典中的键值对);
bar['per'] # 先查找是否有per对象(如字典中的键值对),再查找bar对象是否有per属性;
# 如果没有找到,则返回未定义对象,默认用空字符串替代;
- 变量的来源
# render_template
render_template函数会模板和传递的变量值进行组装
# 自定义的两个变量名context和message可以在模板中使用
render_template('sleeps/sleep.html',context=users,message=data)
# render_template_string方法也可以传递变量名
render_template_string('<p>OK</p><p>OK</p>', name='aaaa')
全局变量
即不需要显性的传递,可以直接使用的变量
- request
# 通过request可以直接获取相关的属性
{{request.args}}
session
g
配置对象config
url_for()
过滤器
过滤器的使用方式为:变量名 | 过滤器。如:{{ 'aaa' | safe | lower}}
全局常用过滤器
default:如果该变量未定义或找不到,使用默认的值;
length:获取字符串,列表,元组,字典的长度
random(seq):从序列中返回一个随机项;
replace(value,old,new,count=None):将old替换为new的字符串,count设置替换的次数;
对数字的操作
abs:返回一个数字的绝对值;
round:四舍五入取整;
round(2,'floor'):截取小数点后两位;'floor'向下截取,'ceil'向上截取,'common'四舍五入,默认的;
int(value):将值转换为int类型。
float(value):将值转换为float类型。
groupby(value, attribute):分组;
reverse:将迭代器反转;
select,selectattr:对序列中进行过滤,返回判断为True的元素组成的列表;
reject,rejectattr:对序列中进行过滤,返回判断为False的元素组成的列表;
对变量的字符串操作
safe:禁用转义;
string(value):将变量转换成字符串。
list(value):将值转换成列表
urlize:将文本的url转换成可点击的链接;urlize(5):将这个链接缩短为显示指定的长度5;
wordcount(s):计算一个长字符串中单词的个数
capitalize:把变量值的首字母转成大写,其余字母转小写;
truncate(value,length=255,killwords=False):截取length长度的字符串。
lower:把值转成小写;
upper:把值转成大写;
title:把值中的每个单词的首字母都转成大写;适用于一句话;
trim:把值的首尾空格去掉;
format:格式化输出;如: <p>{{ '%s is %d' | format('name',17) }}</p>
striptags:渲染之前把值中所有的HTML标签都删掉;
escape:转义字符,会将<、>等符号转义成HTML中的符号。
wordwrap(s, width=79, break_long_words=True, wrapstring=None):将字符串分成指定长度一份,如{{ 'http://www.baidu.com' | wordwrap(9)}}
对列表的操作
first:取列表的第一个元素,如:{{ [1,2,3,4,5,6] | first }}
last:取最后一个元素
sum:列表求和,如果不能计算会报错;
sort:列表排序,默认按升序排列;
batch:对列表分组,形成二维列表,如:{{ [1,2,3,4,5] | batch(2,'ff') }},2个元素一组,不足的使用'ff‘替代;
join:拼接列表中的元素;如:{{ [1,2,3,4,5] | join('&&') }};
upper,lower:将列表中所有的字符串改变大小写;
slice:切片,返回二维列表,slice(2)设置步长
对字典的操作
dictsort(value, case_sensitive=False, by='key'):按键的首字母顺序排序,并生成列表;
如:{{ {'name':'xx','age':'23'} | dictsort }},结果:[('name',"xx"),('age','23')]
sort:排序;
{{ {'name':'xx','age':'23'} | sort(attribute='age', reverse=true) }} # 按指定的字段,降序排列,默认升序;
attr:获取对象的属性;如:{{ {'name':'xx','age':'23'} | attr('age') }}
map(value,attribute):提取值中的某一项组成一个列表;如:{{context| map(attribute='age')}},age组成一个字典;
调试
pprint(value, verbose=False):输出一个变量;
不常用的过滤器
filesizeformat(value, binary=False):将值格式化成文件的大小,如4.1 MB, 102 Bytes等;如果binary=True则为二进制;
自定义过滤器
注意:自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器。
方法一:
过滤器其实是一个函数,可以自定义一个函数,然后通过flask的add_template_filter将我们的函数加入到过滤器表单中;
import app
def funcx(ls):
return ls+3
app.add_template_filter(funcx,'add_3') # 第一个参数为函数的名字,第二个参数为过滤器的名字;
方法二:
使用template_filter函数和装饰器的方式实现;
import app
@app.template_filter('add_3')
def funcx(ls):
return ls+3
全局函数
全局函数是任意函数,可以在任一场景使用,没有输入和输出值的限制。其变量相当于python中的全局变量;
使用方式:
{% set sep = joiner("|") %} # 定义一个全局变量
常用函数
range([start], stop[, step]):和python中的range的用法完全一样;
dict():传入键值对,可以生成字典;
joiner():可以初始化为一个分隔符,然后第一次调用时返回空字符串,以后再调用则返回分隔符。对分隔循环中的内容很有帮助
cycler():这是一个类,周期计允许你在若干个值中循环,传入多个值,在多个值中循环;
# cycler有三个函数
reset():重置周期计到第一个项。
next():返回当前项并跳转到下一个。
current:返回当前项。
lipsum(n=5, html=True, min=20, max=100):在模板中生成 lorem ipsum 乱数假文。默认会生成 5 段 HTML ,每段在 20 到 100 词之间。用来测试;
自定义全局函数
- 使用add_template_global函数;
# 注册全局函数
app.add_template_global(funcx,'add_3')
# 使用装饰器
@app.template_global('add_3')
def funcx(ls):
return ls+3
参考:
flask基础之jijia2模板使用基础(二)的更多相关文章
- flask基础之jijia2模板语言进阶(三)
前言 前面学习了jijia2模板语言的一些基础知识,接下来继续深挖jijia2语言的用法. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) 控制语句 和 ...
- day 68 Django基础四之模板系统
Django基础四之模板系统 本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关 ...
- day 54 Django基础四之模板系统
Django基础四之模板系统 本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模 ...
- C#基础系列——委托和设计模式(二)
前言:前篇 C#基础系列——委托实现简单设计模式 简单介绍了下委托的定义及简单用法.这篇打算从设计模式的角度去解析下委托的使用.我们知道使用委托可以实现对象行为(方法)的动态绑定,从而提高设计的灵活性 ...
- CG基础教程-陈惟老师十二讲笔记
转自 麽洋TinyOcean:http://www.douban.com/people/Tinyocean/notes?start=50&type=note 因为看了陈惟十二讲视频没有课件,边 ...
- django模板系统基础
模板系统基础Django模板是一个string文本,它用来分离一个文档的展现和数据 模板定义了placeholder和表示多种逻辑的tags来规定文档如何展现 通常模板用来输出HTML,但是Djang ...
- 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本
[源码下载] 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本 作者:webabcd 介绍背水一 ...
- Template 基础篇-函数模板(待看
Template 基础篇-函数模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分. Template ...
- laravel5.1框架基础之Blade模板继承简单使用方法分析
本文实例讲述了laravel5.1框架基础之Blade模板继承简单使用方法.分享给大家供大家参考,具体如下: 模板继承什么用? 自然是增强基础页面的复用,有利于页面文档的条理,也便于更改多处使用的内容 ...
随机推荐
- python3判断字典、列表、元组为空以及字典是否存在某个key的方法
#!/usr/bin/python3 #False,0,'',[],{},()都可以视为假 m1=[] m2={} m3=() m4={"name":1,"age&quo ...
- postman 断言学习
请求 url :https://www.v2ex.com/api/nodes/show.json?name=python get请求 postman发起请求并做断言 断言: tests["B ...
- java 类的强制转型
- 一些兼容性的meta标签
<!-- 仅针对IOS的Safari顶端状态条的样式(可选default/black/black-translucent )--> <meta name="apple-mo ...
- 深入理解JVM一类加载器原理
我们知道我们编写的java代码,会经过编译器编译成字节码文件(class文件),再把字节码文件装载到JVM中,映射到各个内存区域中,我们的程序就可以在内存中运行了.那么字节码文件是怎样装载到JVM中的 ...
- 51nod 1292 字符串中的最大值V2(后缀自动机)
题意: 有一个字符串T.字符串S的F函数值可以如下计算:F(S) = L * S在T中出现的次数(L为字符串S的长度).求所有T的子串S中,函数F(S)的最大值. 题解: 求T的后缀自动机,然后所有每 ...
- Middle of Linked List
Find the middle node of a linked list. Example Given 1->2->3, return the node with value 2. Gi ...
- js new date()说明
javaScript UTC() 方法: UTC() 方法可根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数. 要创建一个一个日期对象,可以使用以下的方式: var now=new D ...
- linux-----遇到的问题----tab键不补全sh文件不能运行
在linux上部署tomcat,进入bin目录后 遇到了tab键不补全sh文件不能运行的情况. 如果自己输入sh文件名后也会报错: [x@web bin]$ ./startup.shbash: ./s ...
- C++之正则表达式20171121
准确来说,不论在C++或C中,只要在Linux系统中都可以使用本文讲诉的正则表达式使用方式. 一.Linux中正则表达式的使用步骤: 编译正则表达式 regcomp() 匹配正则表达式 regexec ...