python中Jinja2是什么?如何使用?

本篇文章给大家带来的内容是关于python中jinja2是什么?如何使用?,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

什么是Jinja2

Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能,这对大多应用的安全性来说是非常重要的。

基于unicode并能在python2.4之后的版本运行,包括python3。

如何使用Jinja2

立即学习“Python免费学习笔记(深入)”;

要想使用Jinja2模板,需要从flask导入render_template函数,然后在路由函数中调用render_template函数,该函数第一个参数就是模板名字。模板默认保存在目录。

最简单的模板文件就是普通的HTML文件,但静态文件没什么意义,需要在访问路由时传入响应的参数,并在模板中以一定的样式显示在浏览器中,因此,需要用到render_template函数的关键字参数。假设有一个模板文件hello.html,代码如下:

hello,{{name}}.

登录后复制

这个用{{……}}括起来的部分就是模板表达式。在使用render_template函数调用模板文件hello.html时,需要通过关键字参数指定name值。

render_template('hello.html',name='star')

登录后复制

返回给客户端时,{{name}}会被替换成star.
网页输出代码

hello,star.

登录后复制

jinja2常用语法

1.变量显示语法: {{ 变量名 }}2. for循环:{% for i in li%}{% endfor %}3. if语句{% if user == 'westos'%}{% elif user == 'hello' %}{% else %}{% endif%}

登录后复制

数据显示

# templates目录里面建立mubna.html文件        hello

变量:{{ name }}

列表:{{ li }}

列表元素:{% for item in li %}
{{ item }}{% endfor %}

字典:{{ d }}

字典元素:{{ d.a }}{{ d['b'] }}

对象:{{ u }}

用户 密码
{{ u.name }} {{ u.passwd }}

登录后复制

from flask import Flask, render_templateapp = Flask(__name__)class User(object):    def __init__(self, name, passwd):        self.name = name        self.passwd = passwd    def __str__(self):        return  "" %(self.name)@app.route('/')def index1():    name = "sheen is cute !!"    li = [1, 2, 4, 5]    d = dict(a=1, b=2)    u = User("westos", "passwd")    return  render_template('muban.html',                            name = name,                            li = li,                            d = d,                            u = u                            )app.run()

登录后复制

2949133028-5bd13033e2dcc_articlex.png

模板中的过滤器

服务端给客户端返回的数据可能来自于多种数据源。这些数据格式可能并不能满足客户端需求,就需要对数据进行再加工。
过滤器需要放在模板表达式变量的后面,与变量之间用’|’分割,{{ vlaue|upper}}将value英文字母都转换为大写形式。

编写一个时间过滤器,将时间戳转换为特定格式的字符串时间

from flask import Flask, render_templateimport timeapp = Flask(__name__)def time_format(value,format="%Y-%m-%d %H:%M:%S"):    #  时间戳----> 元组    t_time = time.localtime(value)    #  元组  ----> 指定字符串    return time.strftime(format,t_time)# 第一个参数是过滤器函数,第二个参数是过滤器名称app.add_template_filter(time_format,'time_format')@app.route('/chtime/')def chtime():    return render_template('chtime.html',timestamp = time.time())app.run()

登录后复制

# templates/目录下的chtime.html        Title时间戳{{ timestamp }}
格式化后的时间{{ timestamp | time_format }}

登录后复制

2715859521-5bd13071c2ff8_articlex.png

宏操作

在编写python程序时,会有很多地方调用同样或类似的代码。这种情况,可以把重复使用的代码放到函数或类中,只需要访问函数或类的实例就可以实现代码复用。Jinja2 模板中使用宏来防止代码冗余。

Jinja2 模板中的宏需要放到{%……%},使用修饰,支持参数,并且使用{% endmacro %}结束

如果宏要被多个模板文件共享,就需要将宏单独放到一个模板文件中,然后使用{% import ….%}指令导入该模板

调用宏,实现登陆页面的模板继承

## templates/目录下的macro.html{% macro input(type,  name, text ) %} 

{% endmacro %}

登录后复制

# # templates/目录下的login.html{% extends "base.html" %}{% block title %}登陆{% endblock %}{% block content %}

登录 没有账号?注册

{# /*将表单信息提交给/login路由对应的函数进行处理, 并且提交信息的方式为post方法, 为了密码的安全性*/#} <!--

--> <!----> <!----> <!--

--> {% import 'macro.html' as macro %} {#调用宏模板#} {{macro.input('text', 'user', "用户名/手机/邮箱" )}} {{macro.input('password','passwd', "密码" )}} <!--

--> <!----> <!----> <!--

-->

忘记密码?

{% if message %}

{{ message }}

{% endif %}

{% endblock %}

登录后复制

#主程序from flask import Flask, render_templateapp = Flask(__name__)@app.route('/login/')def login():    return render_template('login.html')app.run()

登录后复制

2982924092-5bd130d6f192b_articlex.png

模板继承

Jinja2模板还有另一种代码复用技术,就是模板继承。当一个模板被另外的模板继承时,可以通过{{ super() }} 访问父模板的资源。在一个模板中继承另一个模板,需要extends 指令。如 child.txt 模板文件从 parent.txt 继承的代码

{% extends ‘parents.txt’ %}

登录后复制

child.txt 从parent.txt模板继承后,会自动使用parent.txt 中的所有代码,但要放在

{% block xxxx%} ....  {% endblock %}

登录后复制

中的代码需要child.txt中使用{{super() }}引用。其中,xxxx是块(block)的名字
模板继承语法:

1. 如何继承某个模板?        {% extends "模板名称" %}2. 如何挖坑和填坑?挖坑:    {% block 名称 %}        默认值    {% endblock %}填坑:    {% block 名称 %}    {% endblock %}3. 如何调用/继承被替代的模板?挖坑:    {% block 名称 %}        默认值    {% endblock %}填坑:    {% block 名称 %}        #如何继承挖坑时的默认值?        {{ super() }}        # 后面写新加的方法.        ........    {% endblock %}

登录后复制

#templates目录下建立parent.html模板文件    {% block head %}        {% block title %}hello{% endblock %}    {% endblock %}I LOVE PYTHON! 
{% block body %} Cute,{{ text }}{% endblock %}

登录后复制

#templates目录下建立child.html模板文件{% extends 'parent.html' %}{% block title %}{#继承挖坑时的默认值:{{ super() }}#}{{ super() }}-{{ text }}{% endblock %}{% block body %}

{{ super() }},Beauty!

{% endblock %}

登录后复制

# 主程序from flask import Flask,render_templateapp = Flask(__name__)@app.route('/')def index():    return render_template('child.html',text = 'sheen')if __name__ == '__main__':    app.run()

登录后复制

1311899705-5bd1310a8c152_articlex.png

以上就是python中Jinja2是什么?如何使用?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2260272.html

(0)
上一篇 2025年2月27日 05:30:28
下一篇 2025年2月27日 05:30:55

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论