Flask模板之测试器和环境对象

2018-10-09  本文已影响0人  煮茶boy

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

{% if age is number %}
    {{ age * 365 }}
{% else %}
     无效的数字
{% endif %}
1. callable(object)     -- 判断对象是否可以被调用
2. defined(value)       -- 判断变量是否已经定义
3. undefined(value)   -- 判断变量是否未定义
4. none(value)        -- 判断变量是否是None
5. number(value)    -- 判断变量是否是数字
6. string(value)      -- 判断变量是否是字符串
7. sequence(value)   -- 判断变量是否是序列
8. iterable(value)    -- 判断变量是否可以迭代
9. mapping(value)    --  判断变量是否是匹配对象,比如字典
10. sameas(value, other)    判断变量和other是否指向相同的内存地址
is 的左侧是测试器的第一个参数,其他参数可以添加到括号传入,也可以在右侧使用空格连接.
{% if foo is sameas(bar) %}
等同于
{% if foo is sameas bar %}
@app.template_test()
def baz(n):
    if n = "baz::
         return True
    return False

模板环境对象

在Jinja2中,渲染行为有Jinja2.Environment类控制,所有的配置选项,上下文变量,全局函数,过滤器和测试器都存储在Environment实例上,当与Flask结合后,我们并不单独创建Environment对象,而是使用Flask创建的Environment对象,它存储在app.jinja_env属性上.

app.jinja_env.variable_start_string = '[['
app.jinja_env.variable_end_string = ']]'

模板环境中的全局函数,过滤器,测试器分别存储在Environment对象的globals,filters和tests属性中,这3个属性都是字典对象.我们也可以直接操作这3个字典来添加相应的函数和变量,这通过向对应的字典添加一个键值对实现,传入模板的名称作为键,对应的函数对象或变量作为值.

def bar():
    return "I am bar"
foo = "I am foo"
app.jinja_env.globals['bar'] = bar
app.jinja_env.globals['foo'] = foo
def smiling(s):
    return s + ":)"
app.jinja_env.filters["smiling"] = smiling
def baz(n):
    if n == "baz"
        return True
   return False
app.jinja_env.tests["baz"] = baz
上一篇 下一篇

猜你喜欢

热点阅读