Flask框架 之模版

一、过滤器

safe:禁用转义;

  <p>{{ '<em>hello</em>' | safe }}</p>

capitalize:把变量值的首字母转成大写,其余字母转小写;

  <p>{{ 'hello' | capitalize }}</p>

lower:把值转成小写;

  <p>{{ 'HELLO' | lower }}</p>

upper:把值转成大写;

  <p>{{ 'hello' | upper }}</p>

title:把值中的每个单词的首字母都转成大写;

  <p>{{ 'hello' | title }}</p>

trim:把值的首尾空格去掉;

  <p>{{ ' hello world ' | trim }}</p>

reverse:字符串反转;

  <p>{{ 'olleh' | reverse }}</p>

format:格式化输出;

  <p>{{ '%s is %d' | format('name',17) }}</p>

striptags:渲染之前把值中所有的HTML标签都删掉;

  <p>{{ '<em>hello</em>' | striptags }}</p>

first:取第一个元素

  <p>{{ [1,2,3,4,5,6] | first }}</p>

last:取最后一个元素

  <p>{{ [1,2,3,4,5,6] | last }}</p>

length:获取列表长度

  <p>{{ [1,2,3,4,5,6] | length }}</p>

sum:列表求和

  <p>{{ [1,2,3,4,5,6] | sum }}</p>

sort:列表排序

  <p>{{ [6,2,3,1,5,4] | sort }}</p>

二、自定义过滤器

  1、定义函数方式

@app.route("/")
def index():
    data = [1,2,3,4,5]
    return render_template("index.html", data=data)

# 1、定义过滤器
def list(li):
    # 1,3,5
    return li[::2]
# 2、注册过滤器
# to_list是模板中使用的名字
app.add_template_filter(list, "to_list")

  2、使用装饰器方式

@app.template_filter("to_list")
def list(li):
    # 1,3,5
    return li[::2]

使用:{{data | to_list}}

三、宏

将重复的代码定义成宏。

1、不带参数定义宏

{% macro input() %}
  <input type="text"
         name="username"
         value=""
         size="30"/>
{% endmacro %}

{{ input() }}

2、定义带参数的宏

{% macro input(name,value='',type='text',size=20) %}
    <input type="{{ type }}"
           name="{{ name }}"
           value="{{ value }}"
           size="{{ size }}"/>
{% endmacro %}

{{ input(value='name',type='password',size=40)}}

3、把宏单独抽取出来,封装成html文件,其它模板中导入使用

文件名可以自定义macro.html

{% macro function() %}
    <input type="text" name="username" placeholde="Username">
    <input type="password" name="password" placeholde="Password">
    <input type="submit">
{% endmacro %}

在其它模板文件中先导入,再调用

{% import 'macro.html' as func %}
{% func.function() %}

四、模版的继承与包含

extends 与 include

from flask import Flask, render_template


app = Flask(__name__)

@app.route("/")
def index():

    return render_template("web.html", title="web模板继承", body="这是内容")

if __name__ == '__main__':

    app.run()

base.html

<!DOCTYPE html>
<html lang="en">
<head>
    {% include 'inc.html'%}
    <title>{% block title %} flask {% endblock %}</title>
</head>
<body>
    {% block body %} {% endblock %}
</body>
</html>

inc.html

<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

web.html

{% extends 'base.html' %}
{% block title %} {{title}} {% endblock %}

{% block body %}

<h1>{{body}}</h1>

{% endblock %}

五、自定义全局函数

def get_option(name, default=None):
        return website_config.get(name) or default
    
app.add_template_global(get_option, "get_option")

使用

{% block title %} {{get_option('name', '测试')}} {% endblock %}

 

posted @ 2019-06-13 22:25  样子2018  阅读(178)  评论(0编辑  收藏  举报