flask框架(六)模板相关

模板对数字、列表、字典和基本函数的引用

app.py

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/index')
def index():
	context = {
        'k1': 123,
        'k2': [12, 23, 34]
        'k3': {'name': 'test', 'age': 123}
        'k4':lambda x: x + 10
    }
    
    return render_template("index.html", **context)

if __name__ == "__main__":
    app.run()

templates下index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
    <!--数字或字符串传值-->
    <h1>
        {{k1}}
    </h1>
    
    
    <!--列表可以直接点下标或者[]下标,也可以for循环-->
    <h1>
        {{k2.0}}{{k2[0]}}
    </h1>
    <h1>
        {% for val in k2 %}
        {{val}}
        {% endfor %}
    </h1>
    
    
    <!--字典取值方式-->
    <h1>
        {{k3.name}}{{k3['name']}}{{k3.get('name', 888)}}
    </h1>
    <h1>
        {% for key in k3.keys() %}
        {{key}}
        {% endfor %}
    </h1>
    <h1>
        {% for value in k3.values() %}
        {{value}}
        {% endfor %}
    </h1>
    <h1>
        {% for x, y in k3.items() %}
        {{x}}{{y}}
        {% endfor %}
    </h1>
    
    
    <!--函数-->
    <h1>
        {{k4}}
        <!--直接返回lambda函数对象 不执行-->
        
        {{k4(10)}}
        <!--需要自己调用才能执行-->
    </h1>
</body>
</html>

 
模板函数引用

from flask import Flask, render_template

app = Flask(__name__)

def gen_input_safe(value):
    return Markup("<input value=%s />" % value)


def gen_input(value):
    return "<input value=%s />" % value


# 模板中可以直接调用,不需要传值
@app.template_global()
def global_func():
    '''
    每个模板都可以直接调用的函数
    :return: str "Global Func"
    '''
    return "Global Func"


@app.template_filter()
def test(a1, a2, a3):
    '''
    同样可以直接调用
    传参格式{a1|test(a2, a3)}
    '''
    return [a1, a2, a3]


@app.route('/index')
def index():
	context = {
        'k5': gen_input
    }
    
    return render_template("index.html", **context)

if __name__ == "__main__":
    app.run()

templates下index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
    <!--函数-->
    <!--直接生成'<input value=10 />'不会生成输入框-->
    <!--防止xss跨镇脚本攻击-->
    <h1>{{k5(10)}}</h1>
    <!--方法一加safe-->
    <!--方法二:后端修改-->
    <h1>{{k5(10)|safe}} {{k6(10)}}</h1>
    <!--全局模板函数-->
    <h1>{{global_func()}}</h1>
    <!--不同传参函数-->
    <h1>{{10|test(20,30)}}</h1>
</body>
</html>

 
模板的继承

layout.html(被继承模板)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>
    <div>
        {% block content %}{% endblock %}
    </div>
</body>
</html>

layin.html(继承模板)

{% extends 'layout.html' %}

{% block content %}
    <!--数字或字符串传值-->
    <h1>{{k1}}</h1>

    <!--列表可以直接点下标或者[]下标,也可以for循环-->
    <h1>{{k2.0}}{{k2[0]}}</h1>
    <h1>{% for val in k2 %} {{val}} {% endfor %}</h1>

    <!--字典取值方式-->
    <h1>{{k3.name}}{{k3['name']}}{{k3.get('name', 888)}}</h1>
    <h1>{% for key in k3.keys() %} {{key}} {% endfor %}</h1>
    <h1>{% for value in k3.values() %} {{value}} {% endfor %}</h1>
    <h1>{% for x, y in k3.items() %} {{x}}{{y}} {% endfor %}</h1>

    <!--函数-->
    <!--直接返回lambda函数对象 不执行-->
    <!--<function index.<locals>.<lambda> at 0x00000248A3438B88>-->
    <h1>{{k4}}</h1>
    <!--需要自己调用才能执行-->
    <h1>{{k4(10)}}</h1>

    <!--直接生成'<input value=10 />'不会生成输入框-->
    <!--防止xss跨镇脚本攻击-->
    <h1>{{k5(10)}}</h1>
    <!--方法一加safe-->
    <!--方法二:后端修改-->
    <h1>{{k5(10)|safe}} {{k6(10)}}</h1>
    <!--全局模板函数-->
    <h1>{{global_func()}}</h1>
    <!--不同传参函数-->
    <h1>{{10|test(20,30)}}</h1>
{% endblock %}

等同于于上面的index.html,可以被后端直接重定向。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值