99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

運(yùn)算符攔截

2018-02-24 15:39 更新

New in version 2.6.

為了性能最大化, Jinja2 會(huì)讓運(yùn)算符直接條用類型特定的回調(diào)方法。這意味著, 通過重載Environment.call()?來攔截是不可能的。此外,由于運(yùn)算符的工作 方式,把運(yùn)算符轉(zhuǎn)換為特殊方法不總是直接可行的。比如為了分類,至少一個(gè)特殊 方法存在。

在 Jinja 2.6 中,開始支持顯式的運(yùn)算符攔截。必要時(shí)也可以用于自定義的特定 運(yùn)算符。為了攔截運(yùn)算符,需要覆寫?SandboxedEnvironment.intercepted_binops?屬性。當(dāng)需要攔截的運(yùn)算符 被添加到這個(gè)集合, Jinja2 會(huì)生成調(diào)用?SandboxedEnvironment.call_binop()?函數(shù)的字節(jié)碼。對于一元運(yùn)算符, 必須替代地使用?unary?屬性和方法。

SandboxedEnvironment.call_binop?的默認(rèn)實(shí)現(xiàn)會(huì)使用?SandboxedEnvironment.binop_table?來把運(yùn)算符標(biāo)號翻譯成執(zhí)行默認(rèn) 運(yùn)算符行為的回調(diào)。

這個(gè)例子展示了冪(?**?)操作符可以在 Jinja2 中禁用:

from jinja2.sandbox import SandboxedEnvironment

class MyEnvironment(SandboxedEnvironment):
    intercepted_binops = frozenset(['**'])

    def call_binop(self, context, operator, left, right):
        if operator == '**':
            return self.undefined('the power operator is unavailable')
        return SandboxedEnvironment.call_binop(self, context,
                                               operator, left, right)

確保始終調(diào)入 super 方法,即使你不攔截這個(gè)調(diào)用。 Jinja2 內(nèi)部會(huì)調(diào)用 這個(gè)方法來對表達(dá)式求值。

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號