前言

在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的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模板使用基础(二)的更多相关文章

  1. flask基础之jijia2模板语言进阶(三)

    前言 前面学习了jijia2模板语言的一些基础知识,接下来继续深挖jijia2语言的用法. 系列文章 flask基础之安装和使用入门(一) flask基础之jijia2模板使用基础(二) 控制语句 和 ...

  2. day 68 Django基础四之模板系统

      Django基础四之模板系统   本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法   模板渲染的官方文档 关 ...

  3. day 54 Django基础四之模板系统

    Django基础四之模板系统   本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法   模板渲染的官方文档 关于模 ...

  4. C#基础系列——委托和设计模式(二)

    前言:前篇 C#基础系列——委托实现简单设计模式 简单介绍了下委托的定义及简单用法.这篇打算从设计模式的角度去解析下委托的使用.我们知道使用委托可以实现对象行为(方法)的动态绑定,从而提高设计的灵活性 ...

  5. CG基础教程-陈惟老师十二讲笔记

    转自 麽洋TinyOcean:http://www.douban.com/people/Tinyocean/notes?start=50&type=note 因为看了陈惟十二讲视频没有课件,边 ...

  6. django模板系统基础

    模板系统基础Django模板是一个string文本,它用来分离一个文档的展现和数据 模板定义了placeholder和表示多种逻辑的tags来规定文档如何展现 通常模板用来输出HTML,但是Djang ...

  7. 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本

    [源码下载] 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本 作者:webabcd 介绍背水一 ...

  8. Template 基础篇-函数模板(待看

    Template 基础篇-函数模板 Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分. Template ...

  9. laravel5.1框架基础之Blade模板继承简单使用方法分析

    本文实例讲述了laravel5.1框架基础之Blade模板继承简单使用方法.分享给大家供大家参考,具体如下: 模板继承什么用? 自然是增强基础页面的复用,有利于页面文档的条理,也便于更改多处使用的内容 ...

随机推荐

  1. mysql导出/导入表结构以及表数据

    导出: 命令行下具体用法如下:  mysqldump -u用戶名 -p密码 -d 数据库名 表名 脚本名; 1.导出数据库为dbname的表结构(其中用戶名为root,密码为dbpasswd,生成的脚 ...

  2. ONS发布订阅消息

    ONS, 全名Open Notification Service, 是阿里基于开源消息中间件RocketMQ的一个云产品. 首先,要申请阿里账号等.本地也可以申请阿里云账号自己调试.此处为公司拥有阿里 ...

  3. 网页移动到一个高度后加载网页元素【getBoundingClientRect好用】

    $(window).scroll(function () { var windowH = $(window).height();//取可视窗口的高度 ).getBoundingClientRect() ...

  4. (转)REST无状态的理解

    转至http://lelglin.iteye.com/blog/1852092 Representational State Transfer的缩写.我对这个词组的翻译是"表现层状态转化&q ...

  5. 前端开发学习之——利用模板实现涉及url问题时的bug分析及解决(chrome源码)

    例如我们要实现如下页面,其中历史页面列表想来自底层返回的数据,此处用testData代替: 最初我写的实现代码如下: html文件: <!doctype html> <html cl ...

  6. 【题解】APIO2014回文串

    哇哦~想不到我有生之年竟然能够做出字符串的题目ヾ(✿゚▽゚)ノ虽然这题比较裸但依然灰常开心! 首先有一个棒棒的性质:本质不同的回文串最多有 O(n) 个.首先 manacher 把它们都找出来,然后问 ...

  7. [TJOI2013]单词 AC自动机

    题面: 洛谷 题解: 很久之前做的题了,只不过之前一直90....最近才发现是哪里写错了. 我们对字符集建AC自动机. 首先考虑一个暴力的做法,把文章当做一个长串,直接在自动机上跳,但是我们会发现,这 ...

  8. Java配置jdk图文教程

    1.计算机 ==>右键属性 2.高级系统设置 3.环境变量 4.找path变量 5.找到jdk的bin目录并复制路径到path环境变量里(jdk5.0以后就可以只配path路径了). 6.pat ...

  9. selenium - javascript - 滚动条

    虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法.在这种情况下,就可以借助JavaScript来控制浏览器的滚动条.WebDriver提供了execu ...

  10. [机器学习]-Adaboost提升算法从原理到实践

    1.基本思想: 综合某些专家的判断,往往要比一个专家单独的判断要好.在”强可学习”和”弱可学习”的概念上来说就是我们通过对多个弱可学习的算法进行”组合提升或者说是强化”得到一个性能赶超强可学习算法的算 ...