Flask入门(6):模板引擎

6.模板引擎

6.1 基本语法

6.2 变量

变量类型和获取方法,可以传整型、字符串、列表、字典、函数

#  模板引擎
from flask import Flask, render_template, Markup

app = Flask(__name__)


@app.template_global()
def global_func(a, b):
    "每个模板都可以调用的函数"
    return a + b


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


@app.route('/index')
def index():
    context = {
        'k1':123,
        'k2':[11,22,33],
        'k3':{'name':'oldboy', 'age':18},
        'k4':lambda x:x+1,
        'k5':gen_input  # 只有当前模板才能调用的函数
    }

    return render_template('index.html', **context)

@app.route('/order')
def order():
    context = {
        'k1':123,
        'k2':[11,22,33]
    }

    return render_template('order.html', **context)

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

html如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>{{ k1 }}</h1>
    <h1>{{ k2.0 }} {{ k2[1] }}</h1>
    <h1>{{ k3.name }} {{ k3['name'] }} {{ k3.get('name','aaa') }}</h1>
    <h1>{{ k4(6) }}</h1>
    <h1>{{ k5(666) }}</h1>
    <h1>{{ global_func(1,2) }}</h1>
</body>
</html>

6.3 过滤器

过滤器用来修改变量,使用一个竖线和变量相隔。

{{ items|join(', ') }}

常用的内置过滤器:

  • safe 渲染时不转义
  • capitalize 首字母大写
  • lower 小写
  • upper 大写
  • title 每个单词的首字母都转换成大写
  • trim 去掉首尾空格
  • striptags 去掉值里的HTML标签
  • default 设置一个默认值,如果变量未定义,就用这个默认值替换。类似这样:
{{ my_variable|default('my_variable is not defined') }}
  • random(seq) 返回一个序列里的随机元素
  • truncate(s, length=255, killwords=False, end=‘…’) 截取出指定长度的文章(文章摘要)
  • format(value, *args, **kwargs) 参考Python的字符串格式化函数
  • length 左边如果是列表,输出列表的数量;如果是字符串,则输出字符串的长度

6.4 标签(控制语句)

语法格式 :{% 标签名 %}

if

{% if data.bool %}
    <li>{{ data.bool }}值为真</li>
{% elif True %}
    <li>{{ True }} 值为真</li>
{% else %}
    <li>{{ data.bool }}值为假</li>
{% endif %}

for循环

{% for i in data.xxxx %}
{# 错误的迭代方法TypeError: 'bool' object is not iterable #}
{#  {% for i in data.bool %}#}
    <li>{{ i }}</li>
{% else %}
    <li>当迭代的变量不存在时 则执行else</li>
{% endfor %}

6.5 继承

语法:
{% extends %} 继承某个模板
{% block %} 挖坑和填坑
{{ super() }} 调用被替换掉的代码

如下:

base.html:被继承的模板

<!DOCTYPE html>
<html lang="en">
<head>
{% block header %}
  <meta charset="UTF-8">
  {% block meta %}
  {% endblock %}
  <title>{% block title%}首页{% endblock %}</title>
  <style>
    {% block style %}
      p{color:red;}
    {% endblock %}
  </style>
  {% block link %}
  {% endblock %}
  {% block script %}
  {% endblock %}
{% endblock %}
</head>
<body>
<header>头部</header>
{% block con %}
  我是中间的内容部分
{% endblock %}
<footer>尾部</footer>
</body>
</html>

extend.html:继承base.html的模板

{% extends 'base.html' %}
{% block title %}
  我的首页
{% endblock %}
{% block style %}
  {{ super() }}
  p{color:green;}
{% endblock %}
{% block con %}
    <p>{{ super() }}</p>
{% endblock %}

参考:
https://zhuanlan.zhihu.com/p/23669244

​https://www.jianshu.com/p/e20e3671c680

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值