前言

在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的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. 使用nginx反向代理时,如何正确获取到用户的真实ip

    在记录日志的的时候,获取用户的信息,比如用户的ip,浏览器等等信息是十分重要的. 但是在使用nginx反向代理的时候,可能经过转发无法获取到用户的真实的ip, 在此情况下需要配置nginx,让其在转发 ...

  2. hdu-题目1159:Common Subsequence

    http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Java/Oth ...

  3. Eclipse中使用git提交代码,报错Testng 运行Cannot find class in classpath的解决方案

    一.查找原因方式 1.点击Project——>Clear...——>Build Automatically 2.查看问题 二.报错因素 1.提交.xlsx文件 2.提交时,.xlsx文件被 ...

  4. BZOJ4985 评分(二分答案+树形dp)

    首先二分答案简化一下问题,现在只有0和1了,要求最后剩下的是1.再简化一下考虑没有已固定的位置怎么做.考虑每个位置由其合并到的位置连边,显然这样形成了一棵三叉树.设f[i]为使得某位置为1其子树至少要 ...

  5. [CQOI2013]新Nim游戏 线性基

    题面 题面 题解 首先我们知道nim游戏先手必败当且仅当所有石堆异或和为0,因此我们的目标就是要使对手拿石堆的时候,无论如何都不能使剩下的石堆异或和为0. 对于一个局面,如果我们可以选取一些可以凑出0 ...

  6. 国内外三个领域巨头告诉你Redis怎么用

    随着数据体积的激增,MySQL+memcache已经满足不了大型互联网类应用的需求,许多机构也纷纷选择Redis作为其架构上的补充.这里我们将为大家分享社交巨头新浪微博.传媒巨头Viacom及图片分享 ...

  7. Android Studio常用的快捷键

    罗列一些常用的快捷键 全局快捷键(比较重要的)   ALT + ENTER 工程快速修复 CTRL + SHIFT + A 快速查找 CTRL + ALT + L (Win) 格式化代码(我的锁屏的快 ...

  8. opencv查找轮廓---cvFindContours && cvDrawCountours 用法及例子

    http://blog.csdn.net/timidsmile/article/details/8519751 环境: vs2008 + opencv2.1 先看,这两个函数的用法(参考 opencv ...

  9. CSK & KCF(tracking)

    转自:http://blog.csdn.net/ben_ben_niao/article/details/51364323 上次介绍了SRDCF算法,发展历史轨迹为CSK=>>KCF/DC ...

  10. Codeforces 895.D String Mark

    D. String Mark time limit per test 4 seconds memory limit per test 256 megabytes input standard inpu ...