求值上下文(缩写为 eval context 或 eval ctx )是 Jinja 2.4 中引入的新对象, 并可以在运行时激活/停用已编译的特性。
当前它只用于启用和禁用自动转义,但也可以用于扩展。
在之前的 Jinja 版本中,过滤器和函数被标记为环境可调用的来从环境中检查自动 转义的状态。在新版本中鼓励通过求值上下文来检查这个设定。
之前的版本:
~~~
@environmentfilter
def filter(env, value):
result = do_something(value)
if env.autoescape:
result = Markup(result)
return result
~~~
在新版本中,你可以用 [contextfilter()](http://docs.jinkan.org/docs/jinja2/api.html#jinja2.contextfilter "jinja2.contextfilter") 从实际的上下文中访问求值上下 文,或用[evalcontextfilter()](http://docs.jinkan.org/docs/jinja2/api.html#jinja2.evalcontextfilter "jinja2.evalcontextfilter") 直接把求值上下文传递给函数:
~~~
@contextfilter
def filter(context, value):
result = do_something(value)
if context.eval_ctx.autoescape:
result = Markup(result)
return result
@evalcontextfilter
def filter(eval_ctx, value):
result = do_something(value)
if eval_ctx.autoescape:
result = Markup(result)
return result
~~~
求值上下文一定不能在运行时修改。修改只能在扩展中的 用 [nodes.EvalContextModifier](http://docs.jinkan.org/docs/jinja2/extensions.html#jinja2.nodes.EvalContextModifier "jinja2.nodes.EvalContextModifier") 和[nodes.ScopedEvalContextModifier](http://docs.jinkan.org/docs/jinja2/extensions.html#jinja2.nodes.ScopedEvalContextModifier "jinja2.nodes.ScopedEvalContextModifier") 发生,而不是通过求值上下文对 象本身。
*class *jinja2.nodes.EvalContext(*environment*, *template_name=None*)[](http://docs.jinkan.org/docs/jinja2/api.html#jinja2.nodes.EvalContext "Permalink to this definition")
Holds evaluation time information. Custom attributes can be attached to it in extensions.
autoescape[](http://docs.jinkan.org/docs/jinja2/api.html#jinja2.EvalContext.autoescape "Permalink to this definition")
True 或 False 取决于自动转义是否激活。
volatile[](http://docs.jinkan.org/docs/jinja2/api.html#jinja2.EvalContext.volatile "Permalink to this definition")
如果编译器不能在编译期求出某些表达式的值,为 True 。在运行时应该 始终为False 。
- 介绍
- 预备知识
- 安装
- 基本 API 使用
- 实验性的 Python 3 支持
- API
- 基础
- Unicode
- 高层 API
- 自动转义
- 标识符的说明
- 未定义类型
- 上下文
- 加载器
- 字节码缓存
- 实用工具
- 异常
- 自定义过滤器
- 求值上下文
- 自定义测试
- 全局命名空间
- 低层 API
- 元 API
- 沙箱
- API
- 运算符拦截
- 模板设计者文档
- 概要
- 变量
- 过滤器
- 测试
- 注释
- 空白控制
- 转义
- 行语句
- 模板继承
- HTML 转义
- 控制结构清单
- 导入上下文行为
- 表达式
- 内置过滤器清单
- 内置测试清单
- 全局函数清单
- 扩展
- 自动转义扩展
- 扩展
- 添加扩展
- i18n 扩展
- 表达式语句
- 循环控制
- With 语句
- 自动转义扩展
- 编写扩展
- 集成
- Babel 集成
- Pylons
- TextMate
- Vim
- 从其它的模板引擎切换
- Jinja1
- Django
- Mako
- 提示和技巧
- Null-Master 退回
- 交替的行
- 高亮活动菜单项
- 访问父级循环