flask学习二
Flask中默认的模板语言是Jinja2
I. Jinja2模板语言中的 for
{% for foo in g %}
{% endfor %}
II. Jinja2模板语言中的 if
{% if g %}
{% elif g %}
{% else %}
{% endif %}
后端专递值给前端Jinja2 模板
return render_template('student.html', student=STUDENT_DICT, a_b=a_b)
return render_template("all_student.html", **{"student":STUDENT ,
"student_list" : STUDENT_LIST,
"student_dict": STUDENT_DICT})
Jinja2 的高阶用法
1.safe
前端方法:
tag = "<input type='text' name='user' value='DragonFire'>"
{{ tag | safe }}
后端方法:
tag = "<input type='text' name='user' value='DragonFire'>"
markup_tag = Markup(tag) # Markup帮助咱们在HTML的标签上做了一层封装,让Jinja2模板语言知道这是一个安全的HTML标签
2.在Jinja2中执行Python函数(模板中执行函数)
后端代码:
def a_b_sum(a,b):
return a+b
@app.route("/")
def index():
return render_template("index.html", tag=a_b_sum)
前端代码:
<body>
{{ tag }}
<br>
{{ tag(99,1) }} # 网页展示计算结果 100
</body>
还可以定义全局函数,无需后端传递给前端,Jinja2直接就可以执行的函数
后端代码:
@app.template_global()
def a_c(a,c):
return a + c
@app.template_filter()
def a_c_b(a,c,b):
return a + c +b
@app.route("/")
def index():
return render_template("index.html", tag="")
前端代码:
<body>
{{ a_c(1,2) }}
<br>
{{ 2 | a_c_b(1,4) }} # 网页展示计算结果 2 + 1 + 4
</body>
尤其是@app.template_filter() 它的调用方式比较特别,这是两个Flask中的特殊装饰器
3.Jinja2模板复用 block
母版:index.html
<body>
<h1>Welcome OldboyEDU</h1>
<h2>下面的内容是不一样的</h2>
{% block content %}
{% endblock %}
<h2>上面的内容是不一样的,但是下面的内容是一样的</h2>
<h1>OldboyEDU is Good</h1>
</body>
子板:login.html
{% extends "index.html" %} # 继承母版
{% block content %} # 替换block内容
<form>
用户名:<input type="text" name="user">
密码:<input type="text" name="pwd">
</form>
{% endblock %}
在这两个页面中,只有 block 中的内容发生了变化,其他的位置完全一样
4.Jinja2模板语言的模块引用 include
login.html 文件中的内容:
<form>
用户名:<input type="text" name="user">
密码:<input type="text" name="pwd">
</form>
index.html 文件中的内容:
<body>
<h1>Welcome OldboyEDU</h1>
<h2>下面的内容是不一样的</h2>
{% include "login.html" %}
<h2>上面的内容是不一样的,但是下面的内容是一样的</h2>
<h1>OldboyEDU is Good</h1>
</body>
看到的结果,这就是将 login.html 当成一个模块,加载到 index.html 页面中

5.Jinja2模板语言中的宏定义
前端代码:
<body>
<h1>Welcome OldboyEDU</h1>
{% macro type_text(name,type) %}
<input type="{{ type }}" name="{{ name }}" value="{{ name }}">
{% endmacro %}
<h2>在下方是使用宏来生成input标签</h2>
{{ type_text("one","text") }}
{{ type_text("two","text") }}
</body>
宏定义一般情况下很少应用到,但是要知道有这么个概念

浙公网安备 33010602011771号