Tuesday, 15 July 2014

python - How to handle attribute access errors in Jinja2? -


मुझे यह मिल गया है:

  टेम्पलेट = '{{invoice.customer.address .city}} ' 

और यह ठीक काम करता है। लेकिन कभी-कभी इनवॉइस कस्टर्मर नल या इनवॉइस। ग्राहक.एड्रेस नल है और फिर जेन्जा फेंकता है jinja2.exceptions.UndefinedError: 'None' के पास कोई विशेषता 'पता नहीं है' क्योंकि यह उस .city भाग तक नहीं पहुंच सकता। तो मैं इसे कैसे चुपचाप में विफल करने के लिए कहूं, अगर वह एक विशेषता का उपयोग नहीं कर सकता है?

धन्यवाद

यदि आप ऐसा अक्सर कर रहे हैं, प्रति-विशेषता फ़िल्टर बनाने की बजाय आप वार् के उत्तर को मनमानाकृत नेस्टेड शब्दकोशों के लिए काम करने के लिए सामान्यीकृत कर सकते हैं, जैसे:

  import jinja2 def चाबी में कुंजी के लिए keys = path.split ('।'): Try: value = value [key] को छोड़कर keyError: डिफ़ॉल्ट वापसी मान वापसी env = jinja2.Environment () env.filters [filter_nested_dict (मान, डिफ़ॉल्ट, पथ) 'Nested_dict'] = filter_nested_dict टेम्पलेट = env.from_string ('' 'शहर: {{इनवॉइस | नेस्टेड_डिक्ट (' & lt; none & gt; ',' customer.address.city ')}}' '')  

उपरोक्त को देखते हुए, यह:

  प्रिंट template.render (इनवॉइस = {})  

आपको देता है:

< पूर्व> शहर: & lt; none & gt;

और यह:

  प्रिंट template.render (चालान = {'ग्राहक': {'address': {'city': 'boston'} }}  

आपको देता है:

  शहर: बोस्टन  

No comments:

Post a Comment