2017-05-06 92 views
0

我使用Jinja2來創建電子郵件通知消息,主要是錯誤通知。Jinja2 failsafe模板渲染

有時候我會收到關於錯誤細節的無效或不完整的數據。畢竟,當這種情況發生時,這是一種錯誤狀態。例如。字典項可能會丟失或者值類型可能不正確。在這種情況下,渲染失敗,但必須發送錯誤通知。

我可以做的異常處理程序如下:

  1. 要發送模板原樣。收件人至少知道錯誤事件的類型,但重要數據將丟失
  2. 發送僅包含原始數據的備份模板。這意味着要保留每條消息的兩個版本。

我真正想要的是在跳過所有錯誤的「best-efort」基礎上呈現模板。 Jinja2有沒有辦法做到這一點?

回答

0

在任何需要的地方使用defaults。也處理未定義的變量:

default(value, default_value=u'', boolean=False)

如果值是不確定的,它將返回傳遞默認值時,可變的,否則值:

{{ my_variable|default('my_variable is not defined') }} 

這將輸出的值如果變量被定義爲my_variable,否則爲'my_variable is not defined'。如果您想使用默認與評估,以虛假的變量,你必須在第二個參數設置爲

{{ ''|default('the string was empty', true) }} 

或者你可以使用none如果你基於數據創建更復雜的結構:

{% if p is not none %} 
    {{ p.User['first_name'] }} 
{% else %} 
    NONE 
{%endif %} 
+0

恐怕這並不像應用格式爲無值等數字或日期/時間錯誤保護正如我寫,我必須接受不一致的源數據,我無法預測數據中所有可能出現的問題。 – VPfB

+0

然後我建議在你的模板中只使用安全值,然後是其他所有的字符串。不理想,但至少您可以在電子郵件中獲得信息。爲什麼不在jinja處理之前嘗試在你的代碼中加入錯誤處理? – aneroid

+1

謝謝你的建議。通知系統只是通過RPC進行通信的大型系統中的幾個模塊之一。我希望在每個Jinja失敗的{{表達式}}'的位置上使它更加健壯和簡單''N/A「'是我所需要的。這樣的功能似乎不可用 - 這也是我的問題的答案。 – VPfB