python flask基础总结 模板

在flask中 用户访问一个url 根据map_url映射 找到正确的视图函数 视图函数根据请求 处理返回正确的数据 返回字符串 html json数据 如果在每个视图函数中都写入html 那么工作量会很大 于是flask 就使用模板 渲染html
模板文件
模板文件一般约定放在APP下的template文件中 flask通过render_template( ) 函数 渲染函数 name=name传入变量 前面的name为模板中的变量名 后面name为在函数中的变量 在html模板中
用{{ name }}使用变量
模板语法
if 判断语句 jinjia2 使用{% %}标识在语句结束的时候要使用结束标签

{%  if user.name %}
	

hello {{ user.name }}

{% else %}

hello boy

(% endif %)

for 循环语句 必须在结尾使用endfor标签声明for语句的结束

{% for i in number %}
	

this number is i

{%endfor%}

模板上下文
模板上下文包含很多变量 包括通过render_template传入的变量
模板内置变量 用set设置
{% set name = tom %}
设置模板数据为变量

{% set name %}
	
  • age {% endset %}
  • 模板全局变量
    config : flask当前配置对象
    request : 请求对象
    session : 回话对象
    g : 请求的变量

    jinjia2内置有全局函数 range( ) dict( )用法和python相同
    url_for( )用于生成该url函数
    get_flashed_messages( )用于获取flash消息的函数

    还可以自定义上下文变量 使用app.context_processor装饰器 注册上下文处理函数 使用时传入参数 返回处理后的value值
    使用

    @app.context_processor
    def num(num):
    	num = num+1
    	return num 	
    

    还可以使用app.template_global 自定义全局函数 用法和自定义上下文变量相似
    过滤器
    jinjia2 在传入参数的时候 有一个过滤器 可以将传入的参数过滤
    常见的内置过滤器有

    过滤器 用法
    default 默认值
    first 第一个元素
    last 最后一个元素
    length 变量的长度
    random 随机元素
    safe 不转义输入的变量
    max 最大值
    min 最小值

    在约定中一般过jinjia2 没有使用sfae过滤器 避免用户的输入为危险变量 如果 设置了过滤器 safe 则按输入输出参数
    jinjia2 还支持自定义过滤器 使用template_filter 装饰器 将函数设置为全局过滤器

    @app.template_filter()
    def name(s):
    	name = 'hello ' + 'name'
    	return name + Markup('hello')
    

    这个过滤器就是将过滤传入的参数加一个hello Markup是为了将字符转换为安全字符
    测试器
    jinjia2 中包含测试器 为了判断一个变量或者表达式是否符合要求 符合则返回True 反之则False

    {% if num is number %}
    	

    the num is {{num}}

    {% else %}

    not number

    {% endif %}

    常见内置测试器
    none : 是否为none
    number : 是否为数字
    string : 是否为字符串

    jinjia2还支持自定义测试器 使用装饰器app.template_test

    @app.template_test()
    def num_is_1(num):
    	if num == 1:
    		return True
    	else:
    		return False
    

    添加全局
    我们可以在固定的文件中 像添加全局配置文件那样配置全局对象 全局函数 全局过滤器 全局测试器
    添加全局测试器可以舍弃全局对象 函数 过滤器 测试器的装饰器 而且易于导入
    1.添加全局对象
    app.jinjia_env.globals[‘全局函数名’] = 函数名
    app.jinjia_env.globals[‘全局对象名’] = 对象名
    2.添加全局过滤器
    app.jinjia_env.fiter[‘全局过滤器名’] = 过滤器函数
    3.添加全局测试器
    app.jinjia_env.test[‘全局测试器名’] = 测试器函数

    模板宏/函数
    jinjia2 的模板宏类似于python的函数 多次使用同一个函数的时候可以以此定义

    {% macro name(name)%}
    	{% if name%}
    		

    hello {{ name }}

    {% else %}

    hello boy

    {% endif %} {% endmacro %}

    此函数名称name 如果 存在就 hello {{ name }} 如果不存在就hello boy 使用 macro 是声明块为 宏/函数 按照约定在最后使用 endmacro
    使用时只需{{name(name)}} 就可以了

    局部模板和模板继承
    局部模板用于导入模板使用 大多用于个性化操作 比如用户的个性化壁纸等
    局部模板仅包含部分内容 当程序中的视图函数处理ajax时 可以返回局部模板 可以使用
    {% include ‘_base.html’ %} 导入局部模板
    而模板继承用于在web的头和尾一般不会变化 如果在每个html文件中都插入头和尾 未免增加了内存量 而且工作量也会大大增加
    使用模板继承时 首先定义基模板

    {% block head %}
    
    {% endblock %}
    

    此处我定义了block基模板 约定在最后使用endblock结束
    在子模板中使用时要
    {% extends ‘base.html’ %}
    导入基模板
    子模板操作类型有覆盖和继承
    如果子模板和基模板都含有同名的块 可以执行以下操作
    1.覆盖 如果含有同名的块 则覆盖基模板内容
    2.追加 如果在子模板中 添加函数{{ super() }} 则子模板内容会追加到基模板中

    静态文件
    flask的静态文件放在static中 html使用url_for(‘static’,filename=‘photo.jpg’) 引用静态文件
    用户可以通过 /static/ 访问静态文件
    还可以添加favicon.ico文件
    favoicon文件为宽高相等的格式文件 命名为favicon.ico 而且 png 和gif文件也被主流浏览器识别
    使用方式为

    
    {% elif type == 'js' %}
    
    {% elif type == 'icon' %}
    
    {% endif %}
    {% endmacro %}
    

    消息闪现
    flask提供flash作为消息闪现的函数
    使用方式为在视图函数中使用flash(‘消息闪现的内容’) 在模板中使用get_flashed_message( )获取消息并闪现出来
    自定义错误页面
    在template中创建404 和 500 .html 文件可以自定义错误页面
    可以使用@app.errorhandler(404/500) 来为函数处理错误的请求
    然后return render_template(‘errors/404.html’),404 渲染404.html 文件和404状态码
    异常错误的属性
    code : 状态码
    name : 错误的原因
    description : 错误描述
    还可以用装饰器 app.errorhandler(错误类型) 处理错误
    以上为最近所学笔记总结

    资料来源于李辉-flask开发实战 若侵权 请联系
    qq : 1759435876
    微信 : 17711405764
    我将第一时间删除并道歉 谢谢 !

    你可能感兴趣的:(python,web,python,flask基础总结,模板)