Flask Web第三章

第三章

3.1.1创建模板

  • Jinjia2定界符

    1. 语句{%...%},如if、for

    2. 表达式{{...}},如变量、字符串、函数等

    3. 注释{#...#}

  • Jinjia2支持使用.获取变量的属性

3.1.3渲染模板

  • 使用render_template()函数,第一个参数传入文件名作为参数,后面可接任意个关键字参数做模板变量,如render_template('index.html',user=user)

  • 传入的变量值可以是字符串、列表、字典,也可以是函数、类和类实例

  • 想传入函数在模板中调用,那么传参时只写函数名,即不带()

3.2.1上下文

  • 上下文包含很多变量,如手动传入的变量、Flask默认传入的变量、使用set标签自定义的变量

  • set标签使用

    1. {%set name='Tom' %}

    2. {%set name%}

      ...........

      ...........

      {%endset%}

  • 内置上下文变量,可直接使用

    1. config:当前配置对象

    2. request:当前请求对象,在已激活的请求环境下用

    3. session:当前回话对象,在已激活的请求环境下用

    4. g:与请求绑定的全局变量,在已激活的请求环境下用

  • 自定义上下文:若多个模板都需要使用同一个变量,不必再多个视图函数重复传入,可使用@app.context_pocessor装饰器注册模板上下文处理函数,注意:该函数要返回一个包含变量键值对的字典每一个render_template()函数执行,使用该装饰器的函数都会执行,将变量加到模板中

3.2.2全局对象

  • 定义:指在所有模板都可以直接使用的对象

  • 内置全局函数

    1. range():与python的range()用法相同

    2. lipsum():生成随机文本,在测试时填充页面,默认5段

    3. dict():与python的dict()用法相同

    4. url_for():生成URL,与视图函数中相同

    5. get_flash_messages():用于获取flash消息的函数

  • 自定义全局函数:除了使用@app.context_pocessor装饰器传入函数,还可以使用@app.template_global装饰器将函数注册为模板全局函数

3.2.3过滤器

  • 过滤器的一个参数在|前,后面的参数可以添加括号传入

  • 过滤器可以叠加

  • 自定义过滤器:使用app.template_filter装饰器,过滤器函数接收被处理参数,返回对参数的处理后的值

3.2.4测试器

  • 测试器用来判断变量或表达式,返回布尔值,使用is连接变量和测试器

  • 测试器第一个参数在is左侧,若有其他参数,可添加括号传入或者使用空格连接参数

  • 自定义测试器:使用app.template_test()装饰器

3.3.1局部模板

  • 使用include标签插入,局部模板的内容会插入在使用include标签的位置

  • 为了与普通模板区别,局部模板命名常以一个下划线开始

3.3.2 宏

  • 类似python的函数,可以使用传递的参数构建内容,返回构建后的结果,为便于管理,把宏单独存储一个文件,通常命名macros.html或者_macros.html

  • 使用macro和endmacro标签声明宏的开始和结束,在开始标签中定义宏的名称和接收的参数。如

    {% macro qux(amount=1)%}

    {%if amout ==1 %}

    ...

    {%endif%}

    {%endmacro%}

  • 使用时,使用import导入,作为函数调用,传入必要参数。如

    {%from ‘macro.html' import qux%}

    ...

    {{ qux(amout=5) }} 注意:这里是{{....}}

  • 注意:include标签插入局部模板时,局部模板的环境跟正常相同。但使用macro时,这个模板只能使用1.全局函数(包括自定义的全局函数)2.过滤器(含自定义的)、测试器(含自定义的)

  • 注意:上调说了使用macro的环境问题,可以在导入时显示使用with context声明传入当前模板的上下文。{%from 'macro.html' import foo with context%}

3.3.3模板继承

  • extends扩展基模板,必须放在子模板第一个标签。{%extends 'base.html'%}

  • 使用super()函数进行声明,函数下面追加子模板的内容

3.4.2加载静态文件

  • 使用url_for()函数引用静态文件,内置的获取静态文件的视图函数端点值为static,默认URL规则为/static/<path:filename>,filename是相对于static文件夹根目录的文件路径,如url_for('static',filename='favicon.ico')

3.4.4自定义错误页面

  • 使用@app.errorhandler(状态码)装饰器,错误处理函数接收异常类作为参数,在返回值中注明http状态码

    @app . errorhandler(404 )

    def page not found(e) :

    return render template (’ errors/404.html ’) ', 404

posted @ 2021-09-12 11:31  zzu的小学生  阅读(69)  评论(0)    收藏  举报