求值上下文

2018-02-24 15:39 更新

求值上下文(縮寫為 eval context 或 eval ctx )是 Jinja 2.4 中引入的新對象, 并可以在運行時激活/停用已編譯的特性。

當前它只用于啟用和禁用自動轉(zhuǎn)義,但也可以用于擴展。

在之前的 Jinja 版本中,過濾器和函數(shù)被標記為環(huán)境可調(diào)用的來從環(huán)境中檢查自動 轉(zhuǎn)義的狀態(tài)。在新版本中鼓勵通過求值上下文來檢查這個設(shè)定。

之前的版本:

@environmentfilter
def filter(env, value):
    result = do_something(value)
    if env.autoescape:
        result = Markup(result)
    return result

在新版本中,你可以用?contextfilter()?從實際的上下文中訪問求值上下 文,或用evalcontextfilter()?直接把求值上下文傳遞給函數(shù):

@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?和nodes.ScopedEvalContextModifier?發(fā)生,而不是通過求值上下文對 象本身。

class?jinja2.nodes.EvalContext(environment,?template_name=None)

Holds evaluation time information. Custom attributes can be attached to it in extensions.

autoescape

True?或?False?取決于自動轉(zhuǎn)義是否激活。

volatile

如果編譯器不能在編譯期求出某些表達式的值,為?True?。在運行時應(yīng)該 始終為False?。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號