最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

模板引擎jinja2

互联网 admin 3浏览 0评论

模板引擎jinja2

1. 什么是Jinja2模板引擎?

1). python的Web开发中, 业务逻辑(实质就是视图函数的内容)和页面逻辑(html
文件)分开的, 使得代码的可读性增强, 代码容易理解和维护;

2). 模板渲染: 在html文件中,通过动态赋值 ,
将重新翻译好的html文件(模板引擎生效) 返回给用户的过程。

3). 其他的模板引擎: Mako, Template, Jinja2

2. 语法

1). Jinja2变量显示语法: {{ 变量名 }}

完整的过滤器查看位置:

Jinja2变量内置过滤器:
safe 渲染值时不转义
capitalize 把值的首字母转换成大写,其他字母转换成小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的 HTML 标签都删掉

如何自定义过滤器?

2). for循环:

{% for i in li%}{% endfor %}

3). if语句

{% if user == 'westos'%}{% elif user == 'hello' %}{% else %}{% endif%}

4). 宏的操作====相当于函数

  • 如何定义宏?

{% macro render(id) %}

hello world {{ id }}


{% endmacro %}

  • 如何调用宏?

{{ render(1) }}
{{ render(2) }}
{{ render(3) }}

5). include包含操作

如何使用: {% include “06_inclued.html”%}

6). 模板的继承: 一般网站的导航栏和底部不会变化, 为了避免重复编写导航栏信息;

- 如何定义模板?

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}  {% endblock %}</title>
</head>
<body>
<div style="width: 100px; height: 200px" > 这是导航栏</div>
{% block body %}hello{% endblock %}<div style="width: 100px; height: 200px" >这是底部</div></body>
</html>

- 如何继承基模板?

在html文件中写入
“”"
{% extends ‘06_base.html’%}

{% block title %}
继承案例
{% endblock %}

{% block body %}
这是最新填的block内容

{% endblock %}
“”"

from flask import  Flask, render_template
app = Flask(__name__)class User(object):def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return  "<User: %s>" %(self.name)@app.route('/')
def index():message = " this is a Message "li = ['fentiao', 'fensi', 'fendai']info = {'name': 'fentiao','age':10}fentiao = User(name="粉条", age=5)tags = "<h1>hello world</h1>"
#render_template 的功能是对先引入index.html,同时根据后面传入的参数,对html进行修改渲染。在使用render_template时,模板的位置放在templates文件夹下面,一般是html文件。return  render_template('06_index.html',message=message,这里模块里的第一个message指的是html里面的变量message,而第二个message指的是函数06_index.html里面的变量messagenames = li,info=info,fentiao=fentiao,tags = tags)@app.route('/users/')
def users():usersinfo = [('user%s' %(i), "password%s" %(i)) for i in range(100)]return  render_template('06_users.html',usersinfo = usersinfo)@app.route("/macro/")
def macro():return  render_template('06_macro.html')@app.route('/extends/')
def extends():return  render_template('06_use_block.html')
# **********************自定义过滤器******************************
# 定义一个函数
def format_data(s):return  "这是一个过滤器:" + s
# 将该函数添加到默认过滤器中;
app.add_template_filter(format_data, 'fmt')  if __name__ == '__main__':app.run()

模板引擎jinja2

1. 什么是Jinja2模板引擎?

1). python的Web开发中, 业务逻辑(实质就是视图函数的内容)和页面逻辑(html
文件)分开的, 使得代码的可读性增强, 代码容易理解和维护;

2). 模板渲染: 在html文件中,通过动态赋值 ,
将重新翻译好的html文件(模板引擎生效) 返回给用户的过程。

3). 其他的模板引擎: Mako, Template, Jinja2

2. 语法

1). Jinja2变量显示语法: {{ 变量名 }}

完整的过滤器查看位置:

Jinja2变量内置过滤器:
safe 渲染值时不转义
capitalize 把值的首字母转换成大写,其他字母转换成小写
lower 把值转换成小写形式
upper 把值转换成大写形式
title 把值中每个单词的首字母都转换成大写
trim 把值的首尾空格去掉
striptags 渲染之前把值中所有的 HTML 标签都删掉

如何自定义过滤器?

2). for循环:

{% for i in li%}{% endfor %}

3). if语句

{% if user == 'westos'%}{% elif user == 'hello' %}{% else %}{% endif%}

4). 宏的操作====相当于函数

  • 如何定义宏?

{% macro render(id) %}

hello world {{ id }}


{% endmacro %}

  • 如何调用宏?

{{ render(1) }}
{{ render(2) }}
{{ render(3) }}

5). include包含操作

如何使用: {% include “06_inclued.html”%}

6). 模板的继承: 一般网站的导航栏和底部不会变化, 为了避免重复编写导航栏信息;

- 如何定义模板?

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}  {% endblock %}</title>
</head>
<body>
<div style="width: 100px; height: 200px" > 这是导航栏</div>
{% block body %}hello{% endblock %}<div style="width: 100px; height: 200px" >这是底部</div></body>
</html>

- 如何继承基模板?

在html文件中写入
“”"
{% extends ‘06_base.html’%}

{% block title %}
继承案例
{% endblock %}

{% block body %}
这是最新填的block内容

{% endblock %}
“”"

from flask import  Flask, render_template
app = Flask(__name__)class User(object):def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return  "<User: %s>" %(self.name)@app.route('/')
def index():message = " this is a Message "li = ['fentiao', 'fensi', 'fendai']info = {'name': 'fentiao','age':10}fentiao = User(name="粉条", age=5)tags = "<h1>hello world</h1>"
#render_template 的功能是对先引入index.html,同时根据后面传入的参数,对html进行修改渲染。在使用render_template时,模板的位置放在templates文件夹下面,一般是html文件。return  render_template('06_index.html',message=message,这里模块里的第一个message指的是html里面的变量message,而第二个message指的是函数06_index.html里面的变量messagenames = li,info=info,fentiao=fentiao,tags = tags)@app.route('/users/')
def users():usersinfo = [('user%s' %(i), "password%s" %(i)) for i in range(100)]return  render_template('06_users.html',usersinfo = usersinfo)@app.route("/macro/")
def macro():return  render_template('06_macro.html')@app.route('/extends/')
def extends():return  render_template('06_use_block.html')
# **********************自定义过滤器******************************
# 定义一个函数
def format_data(s):return  "这是一个过滤器:" + s
# 将该函数添加到默认过滤器中;
app.add_template_filter(format_data, 'fmt')  if __name__ == '__main__':app.run()

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论