2013-07-02 31 views
6

我需要以下引發異常:提高未定義的屬性的例外的Jinja2

jinja2.Template("Hello {{ a.x }}").render(a={}) 

Jinja2的默默返回a.x一個空字符串,所以這將呈現爲「你好」。

如何讓jinja2在未定義的屬性上引發異常?

回答

1

根據文檔你不能因爲這種行爲是一種功能:看到here

我會做的是寫一個表現更在Python的方式,並提出在情況下KeyError自定義過濾器。

jinja2.Template("Hello {{ a|myget('x') }}").render(a={}) 
+1

它可以通過選擇正確的'undefined'類來實際完成(請參閱我的答案)。 – ascobol

7
from jinja2 import Template, StrictUndefined 
print Template("Hello {{ a.x }}", undefined=StrictUndefined).render(a={}) 

這將引發一個異常:可以使用或多或少像

東西,如果你設置了斧頭值

File "<template>", line 1, in top-level template code 
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'x' 

那麼它會工作打算:

print Template("Hello {{ a.x }}", undefined=StrictUndefined).render(a={'x':42}) 

will pr int:

Hello 42