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 %}
	<p>hello {{ user.name }}</p>
{% else %}
	<p>hello boy</p>
(% endif %)

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

{% for i in number %}
	<p> this number is i </p>
{%endfor%}

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

{% set name %}
	<li><a href='/'>age</a>
{% 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 %}
	<p>the num is {{num}}</p>
{% else %}
	<p>not number </p>
{% 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%}
		<p>hello {{ name }}</p>
	{% else %}
		<p>hello boy </p>
	{% endif %}
{% endmacro %}

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

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

{% block head %}
<meta charset="utf-8">
{% endblock %}

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

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

<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }

因为在每个html文件中都要导入某些静态文件 可以定义一个宏来集中加载静态文件

{% macro static_file(type, filename_or_url, local=True) %}
{% if local %}
{% set filename_or_url = url_for('static', filename=filename_or_url) %}
{% endif %}
{% if type == 'css' %}
<link rel="stylesheet" href="{{ filename_or_url }}" type="text/css">
{% elif type == 'js' %}
<script type="text/javascript" src="{{ filename_or_url }}"></script>
{% elif type == 'icon' %}
<link rel="icon" href="{{ filename_or_url }}">
{% 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
我将第一时间删除并道歉 谢谢 !

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值