jinja2

2013-07-02 10 views
6

मैं एक अपवाद को बढ़ाने के लिए निम्नलिखित की जरूरत है अपरिभाषित विशेषताओं के लिए एक अपवाद उठाएँ:jinja2

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

Jinja2 चुपचाप a.x के लिए एक खाली स्ट्रिंग देता है, तो यह रूप में "हैलो" बना देता है।

मैं जिन्जा 2 को अपरिभाषित विशेषताओं पर अपवाद कैसे बढ़ा सकता हूं?

उत्तर

1

प्रलेखन के अनुसार आप क्योंकि उस व्यवहार एक विशेषता है नहीं कर सकते हैं: देख here

मुझे क्या होता है कि एक pythonic तरह से अधिक बर्ताव करता है और मामले में एक KeyError को जन्म देती है कस्टम फ़िल्टर लिखने के लिए है।

कुछ ऐसा जो कम या ज्यादा की तरह इस्तेमाल किया जा सकता है:

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

यह वास्तव में सही 'अपरिभाषित' वर्ग (मेरा उत्तर देखें) चुनकर किया जा सकता है। – 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}) 

PR int:

Hello 42