免费自助建站系统,吴江设计网站公司,私募股权基金网站建设,大连seo加盟1.模板
在前面的示例中#xff0c;视图函数的主要作用是生成请求的响应#xff0c;这是最简单的请求。实际上#xff0c;视图函数有两个作用#xff1a;处理业务逻辑和返回响应内容。在大型应用中#xff0c;把业务逻辑和表现内容放在一起#xff0c;会增加代码的复杂度…1.模板
在前面的示例中视图函数的主要作用是生成请求的响应这是最简单的请求。实际上视图函数有两个作用处理业务逻辑和返回响应内容。在大型应用中把业务逻辑和表现内容放在一起会增加代码的复杂度和维护成本。本节学到的模板它的作用即是承担视图函数的另一个作用即返回响应内容。 模板其实是一个包含响应文本的文件其中用占位符变量表示动态部分告诉模板引擎其具体值需要从使用的数据中获取。使用真实值替换变量再返回最终得到的字符串这个过程称为“渲染”。Flask使用Jinja2这个模板引擎来渲染模板。Jinja2能识别所有类型的变量包括{}。 Jinja2模板引擎Flask提供的render_template函数封装了该模板引擎render_template函数的第一个参数是模板的文件名后面的参数都是键值对表示模板中变量对应的真实值。
Jinja2官方文档http://docs.jinkan.org/docs/jinja2/
我们先来认识下模板的基本语法 {% if user %}{{ user }}
{% else %}hello!
ul{% for index in indexs %}li {{ index }} /li{% endfor %}
/ul通过修改一下前面的示例来学习下模板的简单使用
app.route(/)
def hello_itcast():return render_template(index.html)app.route(/user/name)
def hello_user(name):return render_template(index.html,namename)变量
在模板中{{ variable }}结构表示变量是一种特殊的占位符告诉模板引擎这个位置的值从渲染模板时使用的数据中获取Jinja2除了能识别基本类型的变量还能识别{}
p{{mydict[key]}}/pp{{mylist[1]}}/pp{{mylist[myvariable]}}/pfrom flask import Flask,render_template
app Flask(__name__)app.route(/)
def index():mydict {key:silence is gold}mylist [Speech, is,silver]myintvar 0return render_template(vars.html,mydictmydict,mylistmylist,myintvarmyintvar)
if __name__ __main__:app.run(debugTrue)反向路由
Flask提供了url_for()辅助函数可以使用程序URL映射中保存的信息生成URLurl_for()接收视图函数名作为参数返回对应的URL
如调用url_for(index,_externalTrue)返回的是绝对地址在下面这个示例中是http://127.0.0.1:5000/index。
app.route(/index)
def index():return render_template(index.html)app.route(/user/)
def redirect():return url_for(index,_externalTrue)自定义错误页面
from flask import Flask,render_templateapp.errorhandler(404)
def page_not_found(e):return render_template(404.html), 404 2 过滤器
过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值我们还需要修改变量的显示甚至格式化、运算等等这就用到了过滤器。 过滤器的使用方式为变量名 | 过滤器。 过滤器名写在变量名后面中间用 | 分隔。如{{variable | capitalize}}这个过滤器的作用把变量variable的值的首字母转换为大写其他字母转换为小写。 其他常用过滤器如下
字符串操作
safe禁用转义 p{{ emhello/em | safe }}/pcapitalize把变量值的首字母转成大写其余字母转小写 p{{ hello | capitalize }}/plower把值转成小写 p{{ HELLO | lower }}/pupper把值转成大写 p{{ hello | upper }}/ptitle把值中的每个单词的首字母都转成大写 p{{ hello | title }}/ptrim把值的首尾空格去掉 p{{ hello world | trim }}/preverse:字符串反转 p{{ olleh | reverse }}/pformat:格式化输出 p{{ %s is %d | format(name,17) }}/pstriptags渲染之前把值中所有的HTML标签都删掉 p{{ emhello/em | striptags }}/p列表操作
first取第一个元素 p{{ [1,2,3,4,5,6] | first }}/plast取最后一个元素 p{{ [1,2,3,4,5,6] | last }}/plength获取列表长度 p{{ [1,2,3,4,5,6] | length }}/psum列表求和 p{{ [1,2,3,4,5,6] | sum }}/psort列表排序 p{{ [6,2,3,1,5,4] | sort }}/p语句块过滤(不常用) {% filter upper %}this is a Flask Jinja2 introduction{% endfilter %}自定义过滤器
过滤器的本质是函数。当模板内置的过滤器不能满足需求可以自定义过滤器。自定义过滤器有两种实现方式一种是通过Flask应用对象的add_template_filter方法。还可以通过装饰器来实现自定义过滤器。
自定义的过滤器名称如果和内置的过滤器重名会覆盖内置的过滤器。
实现方式一通过调用应用程序实例的add_template_filter方法实现自定义过滤器。该方法第一个参数是函数名第二个参数是自定义的过滤器名称。
def filter_double_sort(ls):return ls[::2]
app.add_template_filter(filter_double_sort,double_2)实现方式二用装饰器来实现自定义过滤器。装饰器传入的参数是自定义的过滤器名称。
app.template_filter(db3)
def filter_double_sort(ls):return ls[::-3]