jinja2 是一个python的功能齐全的模板引擎,它有完整的unicode支持,一个可选的集成沙箱执行环境。它速度快,被广泛使用。使用jinja2 至少需要python2.4

特性

沙箱中执行

强大的HTML自动转义系统,保护系统免受跨站脚本***(xss)

模板继承

及时编译最优的python代码

可选提前编译模板的时间

易于调试,异常的的行数直接指向模板中对应的行

可配置的语法

安装

tar文件安装

tar fielname.tar.gz

进入解压后的文件目录

然后sudo python setup.py install

pip 安装

sudo pip install jinja2

开发版安装

git clone git://github.com/mitsuhiko/jinja2.git

cd jinja2

ln -s jinja2 /usr/lib/python2.X/site-packages

使用方法

>>> from jinja2 import Template

>>> template = Template('Hello ` name `!')

>>> template.render(name='John Doe')

u'Hello John Doe!'

另外一个示例

cat func.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from jinja2 import Template
def index():f = open('index.html')result = f.read()template = Template(result)data = template.render(name='John Doe', user_list=['alex', 'eric'])return data.encode('utf-8')
newData = index()
print newData

注意 #jinja2 默认返回的字符串的编码格式为unicode 需要转换为utf8后使用

cat index.html

<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title></title>
</head>
<body><h1>`name`</h1><ul>{% for item in user_list %}<li>`item`</li>{% endfor %}</ul>
</body>
</html>

python func.py

<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8"><title></title>
</head>
<body><h1>John Doe</h1><ul><li>alex</li><li>eric</li></ul>
</body>
</html>

使用模板引擎可以使用for if/else 等流程控制语句 ,依照模板引擎的语法规则,其内部会对特定的语法进行替换.

一个例子

web/templates/master/m1.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title><link rel="stylesheet" href="/static/css/comm.css"/>{% block css %}{% endblock %}  #一般这里定义css文件
</head>
<body><div class="header">Top</div><div class="body"><div class="left">MENU</div><div class="content">{% block content %}   # 其他文件在导入m1.html的时候 会替换这里的内容 , 本例中的/son1.html 的  {% block content %}  会替换这里的内容{% endblock %}</div></div>{% block js %}{% endblock %}   #一般这里定义js文件
</body>
</html>

web/templates/include/include1.html

<h1>Include</h1>
<input type="text">
<input type="text">

web/templates/home.html

{% load customDef %}   #这里使用了 自定义标签,对应customDef.py  ; customDef 为文件名
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title>
</head>
<body><h1>What is your name?</h1><h1>`name`</h1><h1>`age`</h1>{% for item in user_list %}  #开始循环<h3>item</h3>    循环的每一项{% endfor %}       结束循环{% myTag01 1 2 %}  #这里使用了 自定义标签,对应customDef.py
</body>
</html>

web/templates/son1.html

{% extends "master/m1.html" %}   # extends   只用一次  其他的使用include 导入文件;master/m1.html 为模板文件, son1.html 的内容会继承模板文件的内容
{% block content %}this is a son page!{% include "include/include1.html" %}   #include 导入文件
{% endblock %}

web/app01/templatetags/customDef.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-from django import template
from django.utils.safestring import mark_safe
from django.template.base import resolve_variable,Node,TemplateSyntaxErrorregister = template.Library()@register.simple_tag()
def myTag01(v1,v2):  #自定义标签的处理方式return v1+v2

web/app01/views.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Create your views here.from django.shortcuts import HttpResponse
from django.shortcuts import renderdef home(request):# return HttpResponse("ok")dic = {"name":"allen","age":12}return render(request,"home.html",dic)def son(request):return render(request,"son1.html")

转载于:https://blog.51cto.com/timesnotes/1748411

python学习笔记-Day17(jinja2)相关推荐

  1. Python学习笔记:Day15 部署Web App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  2. Python学习笔记:Day5 编写web框架

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  3. Python学习笔记:Day1-2 开发环境搭建

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记:web开发3

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. Python学习笔记:第三方模块2

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. [python教程入门学习]python学习笔记(CMD执行文件并传入参数)

    本文章向大家介绍python学习笔记(CMD执行文件并传入参数),主要包括python学习笔记(CMD执行文件并传入参数)使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋 ...

  7. python学习笔记之编写readConfig读写配置文件

    python学习笔记之编写readConfig读写配置文件_weixin_34055910的博客-CSDN博客

  8. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  9. Python学习笔记一简介及安装配置

    Python学习笔记一 参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e54 ...

最新文章

  1. 第一次,我们在人工神经网络中发现了「真」神经元
  2. CVPR 2020丨动态卷积:自适应调整卷积参数,显著提升模型表达能力
  3. 刚发现 emacs的新的go-mode
  4. div:给div加滚动栏 div的滚动栏设置
  5. C++ 算法设计 最大子序和问题
  6. Linux视频切片m3u8,Rtmp转m3u8视频切片系统及方法
  7. matlab和python的语言_四大机器学习编程语言对比:R、Python、MATLAB、Octave
  8. DVB开发之OTA升级
  9. CString、string、char*的综合比较
  10. php数据库之mysql (where 、order By 、 Update)
  11. python 连接mysql视频教程_Python操作MySQL视频教程
  12. 什么是高精准IP地址定位——IP问问
  13. unity游戏框架学习-资源管理
  14. Activiti7入门,Activiti7 数据库表结构详细解析
  15. python 实现A星算法
  16. python调用百度地图,通过经纬度定位
  17. 色彩模型(HSB,RGB,CMYK,YIQ,YUV)
  18. 计算机u盘病毒清除方式,彻底清除u盘病毒有什么方法呢
  19. pandas基础用法详解
  20. R语言survival包Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、drop1函数计算cox回归模型自变量似然比检验值、删除冗余变量重新构建cox模型

热门文章

  1. java php mysql_系统学习javaweb13----MYSQL学习(使用PHP、SQL)1
  2. mysql查询某一时间段之后数据的sql_mysql进阶(十九)SQL语句如何精准查找某一时间段的数据...
  3. zigzag扫描matlab,ZIGZAG扫描的MATLAB实现 | 学步园
  4. 大众点评字体_点评里的神笔马良!她的美食笔记会让你惊掉下巴!
  5. 关于MM32-Link Programmer软件修改建议
  6. 第十六届智能车竞赛参赛队伍提问-6-11
  7. 需要更换手机了:由 TensorFlow Lite 构建无人驾驶微型汽车
  8. 表贴3.3V稳压芯片 PL3500测试 低压差线性稳压器
  9. AI电磁组中的NN到底有什么优势?
  10. python在线编辑器编译excel_python在线编译器的简单原理及简单实现代码