博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask - 模板语言jinja2 和render_template高级用法
阅读量:5135 次
发布时间:2019-06-13

本文共 6850 字,大约阅读时间需要 22 分钟。

目录

  • Flask - 模板语言jinja2 和render_template高级用法
    • 一. 字典传递至前端
    • 二. 列表传入前端Jinja2 模板的操作:
    • 三. 大字典传入前端 Jinja2 模板
    • 四. 传递多个参数到前段
    • 五.利用 **{}字典的方式传递参数 ##
    • 六. jinja2的高阶用法
      • safe
      • 在jinja2模板中执行Python函数
      • jinja模板复用 block
      • Jinja2模板语言的模块引用 include
      • Jinja2模板语言中的宏定义

Flask - 模板语言jinja2 和render_template高级用法

  • Django 的模板语言是 render_tempalte
  • Flask 的模板语言呢是jinja2
  • jinja2包含 render_tempalte

看下面一些概念认认脸:

{
{ }} # 变量,非逻辑代码{
% %} # 逻辑代码{
% if session %} # if 语句{% endif %}{
% for foo in session %} # for 循环语句 {% endfor %}@app.template_global() # 全局函数Markup # 安全标签字符串儿{
% macro func() %}{
% endmacro %}

定义以下参数:

STUDENT = {
'name': 'Old', 'age': 38, 'gender': '中'},STUDENT_LIST = [ {
'name': 'Old', 'age': 38, 'gender': '中'}, {
'name': 'Boy', 'age': 73, 'gender': '男'}, {
'name': 'EDU', 'age': 84, 'gender': '女'}]STUDENT_DICT = { 1: {
'name': 'Old', 'age': 38, 'gender': '中'}, 2: {
'name': 'Boy', 'age': 73, 'gender': '男'}, 3: {
'name': 'EDU', 'age': 84, 'gender': '女'},

一. 字典传递至前端

后端:

@app.route("/student")def index():    return render_template("student.html", student=STUDENT)

前端:

    
Old Boy EDUWelcome to Old Boy EDU
{
{ student }}
{
{ student.name }}
{
{ student["age"] }}
{
{ student.get("gender") }}

结果:

二. 列表传入前端Jinja2 模板的操作:

后端:

@app.route("/student_list")def student_list():    return render_template("student_list.html", student=STUDENT_LIST)

前端:

    
Old Boy EDUWelcome to Old Boy EDU
{
{ student }}
{% for foo in student %}
{% endfor %}
{
{ foo }}
{
{ foo.name }}
{
{ foo.get("age") }}
{
{ foo["gender"] }}

结果:

三. 大字典传入前端 Jinja2 模板

后端:

@app.route("/student_dict")def student_dict():    return render_template("student_dict.html", student=STUDENT_DICT)

前端:

    
Old Boy EDUWelcome to Old Boy EDU
{% for foo in student %}
{% endfor %}
{
{ foo }}
{
{ student.get(foo).name }}
{
{ student[foo].get("age") }}
{
{ student[foo]["gender"] }}

在遍历字典的时候,foo 其实是相当于拿出了字典中的Key

结果:

四. 传递多个参数到前段

 

后端:

@app.route("/allstudent")def all_student():    return render_template("all_student.html", student=STUDENT ,                           student_list = STUDENT_LIST,                           student_dict= STUDENT_DICT)

前端:

    
Old Boy EDU
_____________________________________
Welcome to Old Boy EDU : student
{
{ student }}
{
{ student.name }}
{
{ student["age"] }}
{
{ student.get("gender") }}
_____________________________________
Welcome to Old Boy EDU : student_list
{
{ student_list }}
{% for foo in student_list %}
{% endfor %}
{
{ foo }}
{
{ foo.name }}
{
{ foo.get("age") }}
{
{ foo["gender"] }}
_____________________________________
Welcome to Old Boy EDU : student_dict
{
{ student_dict }}
{% for foo in student_dict %}
{% endfor %}
{
{ foo }}
{
{ student_dict.get(foo).name }}
{
{ student_dict[foo].get("age") }}
{
{ student_dict[foo]["gender"] }}

结果:

五.利用 **{}字典的方式传递参

@app.route("/allstudent")def all_student():    return render_template("all_student.html", **{
"student":STUDENT , "student_list" : STUDENT_LIST, "student_dict": STUDENT_DICT})

六. jinja2的高阶用法

    safe

第一种方式:

后端:

from flask import Flaskfrom flask import render_templateapp = Flask(__name__)@app.route("/")def index():    tag = ""    return render_template("index.html",tag=tag)app.run("0.0.0.0",5000)

前端:

    
Title {
{ tag | safe}}

第二种可以从后端入手:

from flask import Flaskfrom flask import render_templatefrom flask import Markup  # 导入 flask 中的 Markup 模块app = Flask(__name__)@app.route("/")def index():    tag = ""    markup_tag = Markup(tag)  # Markup帮助咱们在HTML的标签上做了一层封装,让Jinja2模板语言知道这是一个安全的HTML标签    print(markup_tag,          type(markup_tag))  #  
return render_template("index.html", tag=markup_tag)app.run("0.0.0.0", 5000, debug=True)

    在jinja2模板中执行Python函数

  1. 后端函数传到前段

后端代码:

from flask import Flaskfrom flask import render_templatefrom flask import Markup  # 导入 flask 中的 Markup 模块app = Flask(__name__)#定义一个函数,把它传递给前端def a_b_sum(a,b):    return a+b@app.route("/")def index():    return render_template("index.html", tag=a_b_sum)app.run("0.0.0.0", 5000, debug=True)

前段代码:

    
Title {
{ tag }}
{
{ tag(99,1) }}

  1. 定义全局函数,无需后端传递给前端,Jinja2直接就可以执行的函数

后端代码:

from flask import Flaskfrom flask import render_templatefrom flask import Markup  # 导入 flask 中的 Markup 模块app = Flask(__name__)@app.template_global()  # 定义全局模板函数def a_b_sum(a, b):    return a + b@app.template_filter()  # 定义全局模板函数def a_b_c_sum(a, b, c):    return a + b + c@app.route("/")def index():    return render_template("index.html", tag="")app.run("0.0.0.0", 5000, debug=True)

前段代码:

    
Title {
{ a_b_sum(99,1) }}
{
{ 1 | a_b_c_sum(197,2) }}

    jinja模板复用 block

1.提供一个模板index.html

    
Title

Welcome OldboyEDU

下面的内容是不一样的

{% block content %} {% endblock %}

上面的内容是不一样的,但是下面的内容是一样的

OldboyEDU is Good

2.login.html使用index.html模板

{% extends "index.html" %}{% block content %}    
用户名:
密码:
{% endblock %}

    Jinja2模板语言的模块引用 include

login.html 文件中的内容:

用户名:
密码:

index.html 文件中的内容

    
Title

Welcome OldboyEDU

下面的内容是不一样的

{% include "login.html" %}

上面的内容是不一样的,但是下面的内容是一样的

后端代码:

from flask import Flaskfrom flask import render_templateapp = Flask(__name__)@app.route("/")def index():    return render_template("index.html")app.run("0.0.0.0", 5000, debug=True)

 

这就是将 login.html 当成一个模块,加载到 index.html 页面中

    Jinja2模板语言中的宏定义

前端代码:

    
Title{% macro type_text(name,type) %} {% endmacro %}

在下方是使用宏来生成input标签

{
{ type_text("one","text") }}{
{ type_text("two","text") }}

 

      

转载于:https://www.cnblogs.com/lw1095950124/p/10955987.html

你可能感兴趣的文章
C#获得计算机名,当前登录用户名,Ip地址 .
查看>>
推荐几个精致的前端Web UI框架
查看>>
Vagrant 构建 LNMP 一致环境
查看>>
matlab 向量法建数组(推荐)
查看>>
easyui学习笔记4—panel的实现
查看>>
php性能调优
查看>>
科软-信息安全实验3-Rootkit劫持系统调用
查看>>
MySQL中根据A表画更新B表
查看>>
链接原理
查看>>
前端性能毫秒必争综合方案
查看>>
JavaEE Design Patter(2)
查看>>
关于java的回调方法
查看>>
最近用到的框架
查看>>
testservice小项目总结
查看>>
为什么重写equals方法时,要求必须重写hashCode方法?
查看>>
java8新特性:对map集合排序
查看>>
奇妙的for-in
查看>>
web服务器技术
查看>>
Ubuntu16.04 安装搜狗输入法
查看>>
[ACM_几何] F. 3D Triangles (三维三角行相交)
查看>>