Flask笔记(2)--flask的jinja2模板引擎

模板

​ flask使用jinja2渲染模板。

render_template()

render_template('*.html',参数)方法可以让视图函数返回一个模板,就是HTML页面,模板的路径默认从template开始查找。render_template_string()用来渲染字符串。

向模板传递参数

​ 在前端页面中有许多参数据需要由后端传递,在html页面中用{{ }}为数据预留位置。render_template()传递参数的方式有两种:

#test.html页面

{{ name }}

{{ age }}

#视图函数中: #第一种方式:以键值对方式# def func(): return render_template('test.html', name='Tom', age=19) #第二种:字典参数# def func(): args={'name':'Tom', 'age':19} return render_template('test.html', **args)

模板中的流程语句:for,if

​ 在模板中也可以使用佛for语句和if语句,使用语法和在python中一样,但是for和if的语句要放在{% %}中。

#html中
{% if 条件 %}
    html语句
{% else %}
    html语句
{% endif %}


{% for i in 可遍历的对象 %}
    html语句
{% endfor %}

过滤器

  1. 过滤器可以处理变量,把原始的变量处理后展示出来。

  2. 语法:{{avatar|default('xxxx')}}

  3. 常用过滤器:

    • default过滤器:如果当前变量未被定义,这时候可以指定默认值。
    • length过滤器:求变量(列表字符串数组字典等)的长度
    • capitaliz: 字母字符串首字母大写
    • lower: 全部小写
    • trim: 去除字符串前后的空白字符
    • reverse:字符串反转
    • format(): 格式化输出。
    • 更多过滤器访问Jinja官方文档:http://jinja.pocoo.org/docs/dev/templates/#builtin-filters
  4. 自定义过滤器

    ​ 过滤器其实就是一个函数而已,所以当内置过滤器无法满足需要时,可以自定义过滤器。

#首先定义一个函数
def func(l):
    return l[:3]          #返回传入列表的前三个值
#如何把这个函数变成一个过滤器呢?
#第一种方法,使用flask应用对象那个提供的“add_template_filter方法
app.add_template_filter(func,'func') #第一个参数为过滤器函数名,第二个参数为过滤器的名称,我们在模板中使用时就是使用则个名称

#第二种方法,使用装饰器,在定义函数时,添加上装饰器就可以了
@app.template_filter('func[过滤器名]')
def func():
    pass

block-继承的用法

block是用来让子类html模板继承父类html模板的东西。把一些公共的代码放在父模板中,避免每个模板写同样的代码

{% extends 'xxx.html' %}   #继承xxx.html模版
#在父模板中:
{% block name(接口名) %}{% endblock %}     #为子html留下接口以便子模板添加内容

#子模板中:
{% block name(接口名) %}
    代码体
{% endblock %}                  #在子模板中使用接口

加载静态文件

url_for('static', filename='路径') flask加载静态文件是从static文件开始查找的

<img src="{{ url_for('static',filename='*.jpg' }}">

flask独有的标签内容

+定义变量

set定义的变量在页面内有效,with定义的变量只在with中有效

{% set name='Tom' %}

{% with age=20 %}
    变量age: {{ age }}
{% endwith %}

+宏定义:macro

#在宏定义的页面中定义,以macro.html为例
{% macro myinput(name, value='', type='text') %}
    "{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}

#在其他页面中引用
{% from 'macro.html' import myinput %}

登陆表单

""> 用户名:{{ myinput('username') }}
密 码:{{ myinput('password', type='password') }}

错误页面定制

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html')

你可能感兴趣的:(flask)