Flask模板辅助工具

一、上下文

1.内置上下文变量

- config: 当前配置的对象;
- request: 当前的请求对象,在已激活的请求环境下可用;
- session:当前的会话对象,在已激活的请求环境下可用;
- g:与请求绑定的全局变量,在已激活的请求环境下可用。

2.自定义上下文

# 自定义模板上下文
@app.context_processor
def inject_info():
    foo = 'I am foo.'
    return dict(foo=foo)

二、全局对象

1.内置全局函数

  • jinja2提供的三个常用的全局函数:
	- range([start,]stop[, step]): 和python中的range()用法相同;
	- lipsum(n=5, html=True, min=20,max=100): 生成随机文本(lorem ipsum),可以在测试时用来填充页面。默认生成5段HTML文本,每行包含20~100个单词;
	- dict(**items): 和python中的dict()用法相同。
  • Flask内置的两个全局函数:
	- url_for(): 用于生成URL的函数;
	- get_flashed_messages(): 用于获取flash消息的函数。

2.自定义全局函数

# 自定义全局函数
@app.template_global()
def bar():
    return 'I am bar'

app.template_global() 仅能用于注册全局函数

三、过滤器

在jinja2中,过滤器(filter)是一些可以用来修改和过滤变量值的特殊函数,过滤器和变量用一个竖线(管道符号)隔开,需要参数的过滤器可以像函数一样使用括号传递。

1.内置过滤器

- default(value, default_value='u', boolean=False): 设置默认值,默认值作为参数传入,别名为d;
- escape(s): 转义HTML文本,别名为e;
- first(seq): 返回序列的第一个元素;
- last(seq): 返回序列的最后一个元素;
- length(object): 返回变量的长度;
- random(seq): 返回序列中的随机元素;
- safe(value): 将变量值标记为安全,避免转义;
- trim(value): 清除变量值前后的空格;
- max(value, case_sensitive=False, attribute=None): 返回序列中的最大值; 
- min(value, case_sensitive=False, attribute=None): 返回序列中的最小值;
- unique(value, case_sensitive=False, attribute=None): 返回序列中的不重复的值;
- striptags(value): 清楚变量值内的HTML标签;
- urlize(value, trim_url_limit=None, nofollow=False, target=None, rel=None): 将URL文本转换为可单击的HTLM链接;
- wordcount(s): 计算单词数量;
- tojson(value, indent=None): 将变换值转换为JSON格式;
- truncate(s, length=255, killwords=False, end='...', leeway=None): 截断字符串,常用于显示文章摘要,length参数设置截断的长度,killwords参数设置是否截断单词,end参数设置结尾的符号。

在使用过滤器时,列表中过滤器函数的第一个参数表示被过滤的变量值(value)或字符串(s),即竖线符号左侧的值,其他的参数可以通过添加括号传入。

2.自定义过滤器

# 自定义过滤器
@app.template_filter()
def musical(s):
    return s + Markup(' ♫')
    # ♫为音符的HTML实体,我们用Markup类将它标记为安全字符。
{{ name|musical }}

四、测试器

在jinja2中,测试器(Test)是一些用来测试变量或表达式,返回布尔值(True或False)的特殊函数。

1.内置测试器

- callable(object): 判断对象是否可被调用;
- defined(value): 判断变量是否已定义;
- undefined(value): 判断变量是否未定义;
- none(value): 判断变量是否为None;
- number(value): 判断变量是否是数字;
- string(value): 判断变量是否是字符串;
- sequence(value): 判断变量是否是序列,比如字符串、列表、元组;
- iterable(value): 判断变量是否可迭代;
- mapping(value): 判断变量是否匹配对象,比如字典;
- sameas(value, other): 判断变量与other是否指向相同的内存地址。

2.自定义测试器

# 自定义测试器
@app.template_test()
def baz(n):
    if n == 'baz':
        return True
    return False

五、模板环境对象

模板环境中的全局函数,过滤器和测试器分别存储在Environment对象的globals、filters和tests属性中,这三个属性都是字典对象。除了使用flask提供的装饰器和方法注册自定义函数,我们也可以直接操作这三个字典来添加相应的函数或变量,这通过向对应字典属性中添加一个键值对实现,要在模板里使用的变量名称作为键,对应的函数对象或变量作为值。下面是几个简单的示例:
1.添加自定义全局对象

# 添加自定义全局对象
def bar():
    return 'I am bar.'

foo = 'I am foo.'

app.jinja_env.globals['bar'] = bar
app.jinja_env.globals['foo'] = foo

2.添加自定义过滤器

# 添加自定义过滤器
def smiling(s):
    return s + ':)'

app.jinja_env.filters['smiling'] = smiling

3.添加自定义测试器

def baz(n):
    if n == 'baz':
        return True
    return False

app.jinja_env.tests['baz'] = baz
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值