求值上下文(縮寫為 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 退回
- 交替的行
- 高亮活動菜單項
- 訪問父級循環