前言

在以前前后端不分离的时代,后台程序员往往又当爹又当妈,需要将前端程序员写的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. 使用JMeter录制Web应用测试脚本

    环境 操作系统:Windows 7 工具:JMeter.Badboy 1. 使用代理录制Web性能测试脚本 使用代理录制脚本来创建测试计划无疑是一个简便的方法,代理所要完成的工作就是录制发往服务器的请 ...

  2. 【JavaScript&jQuery】轮展图

    用bootstrap实现轮展图和用Jquery自定义轮展图两种   1.使用bootstrap插件 效果图: 用一个超简单的方法,那就是用bootstrap的插件,什么?不懂bootstrap?没关系 ...

  3. ubuntu16.04上安装配置DHCP服务的详细过程

    DHCP服务器是为客户端机器分配IP地址的,所有分配的IP地址都保存在DHCP服务器的数据库中.为了在子网中实现DHCP分配IP地址,需要在目标主机上安装配置DHCP服务 1. 安装DHCP服务 安装 ...

  4. What Is The Promiscuous Mode

    What Is The Promiscuous Mode? Some Network Interface Cards (NICs) may not allow network traffic afte ...

  5. EVE-NG FAQ

    EVE-NG FAQ How to install EVE on bare box using Ubuntuoriginal ISO distro. Get Ubuntu ISO: https://w ...

  6. 分治FFT

    目录 分治FFT 目的 算法 代码 分治FFT 目的 解决这样一类式子: \[f[n] = \sum_{i = 0}^{n - 1}f[i]g[n - i]\] 算法 看上去跟普通卷积式子挺像的,但是 ...

  7. loj2541 「PKUWC2018」猎人杀 【容斥 + 分治NTT】

    题目链接 loj2541 题解 思路很妙啊, 人傻想不到啊 觉得十分难求,考虑容斥 由于\(1\)号可能不是最后一个被杀的,我们容斥一下\(1\)号之后至少有几个没被杀 我们令\(A = \sum\l ...

  8. laravel5.1 使用中间表的多对多关联

    用户表user 标签表tag 中间表user_tag(user_id,tag_id) 在user模型中定义tags关联如下: public function tags() { return $this ...

  9. shiro的原理理解

    1.shiro原理图如下: 框架解释: subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证.授权. securityManager:安全管理器,主体进行认证和授权都 ...

  10. vmvare彻底删除(转)

    bat脚本 echo off cls echo "flag">>%windir%\system32\test.log if not exist %windir%\sys ...