jinjia2模板编程

转载 2017年01月03日 23:03:14

jinjia2模板可以保存在任何基于文本的文件中,比如XML、HTML、CSV等,由普通内容、变量、表达式、标签、和注释组成,可以通过render_template函数进行渲染


构成:
普通内容:渲染时不对其进行解释。
<head> 
<title>
<body>
<li>
变量:渲染时进行替换的内容
{{ ... }}
表达式:算数、逻辑操作表达式
{%  %}
标签:渲染时进行逻辑控制
注释:渲染时进行删除
{# comment #}


过滤器:
过滤器是一种转换变量输出内容的技术,比如将字符串变量转换为大写形式、去除特殊字符等功能
多个过滤器可以链式调用,类似linux命令行的管道,前面的输出作为后一个的输入
灵活运用过滤器可以极大的丰富模板的转换功能

abs(number)
atrr(object,name)
capitalize(s)
center(value,width = 80)
default(value,default_value = u' ',boolean = False)
dictsort(value,case_sensitive = False,by = 'key') 
escape(string)
filesizeformat(value,binary=False)
first(sequence) 返回序列的第一个元素
float(value,default = 0.0)
forceescape(value)
format(value,*attribute) 字符串格式化功能,value是格式定义,attribute是可变长参数接受占位符代表的值。
{{ "%s-%s"|format("hello","jack")}}
-> hello-jack
groupby(value,attribute) 按照指定的共有属性将集合进行分组,返回元组组成的列表
<ul>
{% for group in perons|groupby('gender') %}
<li> {{ group.grouper }} <ul>
{% for person in group.list %}
<li>{{ person.first_name }} {{ person.last_name }} </li>
{% endfor %} </ul> </li>
{% endfor %}
</ul>

indent(string,width = 4,indentfirst = False)  用于定义缩进
int(value,default = 0)
join(value,d = u'')
{{ [1,2,3]|join('|') }}
{{ [1,2,3]|join }}
last(seq) 返回指定序列的最后一个元素
length(obj) 对象一般为序列或字典
list(value) 将接受的value转换为一个list
lower(value)
pprint(value,verbose = False)
random(seq) 随返回seq中的一个元素
replace(string,old,new,count = None) 替换字符,count指定替换个数
reverse(value) 接受一个可迭代对象,进行逆序输出
round(value,precision = 0,method = 'common') 舍入运算,precision 指定精度,method 可以是common/ceil/floor 四舍五入、进位、舍去
safe(value) 标记value为安全的,使用escape进行转码时不会二次转码
slice(value,slices,fill_width = None) 切片
sort(value,reverse = False,case_sensitive = False,attribute = None)
升序、大小写不敏感、按attribute(value的一个属性)进行排序
string(object)
striptags(value) 去除SGML、XML标签
sum(iterable,attribute = None,start = 0)
对可迭代变量或可迭代变量的某一属性进行求和
title(s) 将s转换为标题的显示形式
trim(value) 去除字符串的前导和续尾中的空格
truncate(s,length = 255,killwords = False,end = '...')
将字符转换为简略形式
upper(s)
wordcount(s) 计算字符串中的单词个数
wordwrap(s,width = 79,break_long_words = True,wrapstring = None)
将字符串按参数中的值进行分行处理


流程控制
测试:
allable(object)
defined(value)
divisibleby(value,num)
escaped(value)
even(value)
iterable(value)
lower(value)
none(value)
number(value)
odd(value)
sameas(value,other) 用于判断value与other是否在同一块内存中(属于同一个对象)
sequence(value)  检查对象是否是序列
string(value)
undefined(value)
upper()

eg:
{% if loop.index is divisibleby(3) %}

判断语句:
{% if xx %}
{% elif %}
{% else %}
{% endif %}

循环语句
{% for user in user是 %}

loop.index
loop.index0
loop.revindex
loop.revindex0
loop.first
loop.last
loop.length
loop.cycle 在一串序列间取值的辅助函数

模板继承:

基模板至少应该包含如下内容:

必须包含的
<html>
<head>
<body>
通常需要包含的
<title> 声明页面标题
<meta> 标签标识的页面显示方式
<link> 标签引入需要的css文件
<scrip> 标签引入的脚本文件 javascript
<header> 变迁显示的页面头
{% block content %}{% endblock %}  用于引用子模块
子模板
{% extend “base.html” %}
{% block xxx %}  xxx不能在模板中重复出现
xxx
{% endblock %}



边做边学Python Flask Web开发(4)-- 使用Jinjia2模板(上)

概述Flask中我们通常使用Jinjia2模板语言来实现复杂的页面渲染,Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了...
  • langkew
  • langkew
  • 2016年06月22日 15:07
  • 2869

边做边学Python Flask Web开发(5)-- 使用Jinjia2模板(中)

上一篇介绍了Jinjia2模板系统的基本用法,本篇将深入对Jinjia2进行探讨,对网页设计中经常会用到的一些高级特性进行介绍。模板复用复用是网页设计非常常用的特性,比如我们的页面头部的网站名称和页尾...
  • langkew
  • langkew
  • 2016年07月06日 15:41
  • 2957

在js里面使用jinjia2的变量(后台传到前台的变量)

系统:linux 编程语言:python 问题产生的原因:html前端的页面是靠后台传出的数据的多少和值进行显示的(用{% for xxx in result%}循环产生)但是因为数据量巨大不能再...
  • wr166
  • wr166
  • 2017年12月06日 11:34
  • 24

标准模板库 STL-2 编程题#1(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)

编程题#1来源: POJ (http://cxsjsxmooc.openjudge.cn/test/9w6/)注意: 提交时只提交补充内容!描述 下面的程序用枚举法解决如下问题,请填空。平面上的一个...

标准模板库 STL-2 编程题#5: 热血格斗场(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;OpenJudge)

编程题#5: 热血格斗场来源: POJ (http://cxsjsx.openjudge.cn/hw2017total01/H05/)注意: 总时间限制: 1000ms 内存限制: 65536kB描述...

模板与泛型编程2

1.模板实参推断1.1 自动类型转换const转换:非const对象的引用(指针)传递给一个const的引用(指针)形参。 数组或函数指针转换:若函数实参不是引用类型,则可以对数组或函数类型的实参应...

C++模板元编程之编译期间“产生从2到某个给定值之间的所有质数”

本文的灵感来自于C++模板元编程技术与应用,里面讲到“ 1994年,在圣迭哥举行的一次C++标准委员会会议期间, Erwin Unruh展示了一段特别的代码,可以在编译期以编译 错误信息的方式产...
  • lslxdx
  • lslxdx
  • 2012年09月02日 17:30
  • 1146

【c++进阶】2、泛型编程之函数模板

【一】模板函数

[C++] 模板与泛型编程(2)

类模板类模板(class template)是用来生成类的蓝图的。与函数模板的不同之处是,编译器不能为类模板推断模板参数类型实现strblob的模板版本,提供对元素的共享(且核查过的)访问能力。tem...

模板和泛型编程 --实例化-- C++ primer 第十六章(2)

16.1.4. 模板类型形参 类型形参由关键字 class 或 typename 后接说明符构成。在模板形参表中,这两个关键字具有相同的含义,都指出后面所接的名字表示一个类型。模板类型形参可作为类型...
  • kee131
  • kee131
  • 2015年03月24日 13:36
  • 363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jinjia2模板编程
举报原因:
原因补充:

(最多只允许输入30个字)