我有一個Django應用程序,它使用Django模板系統生成其(非HTML)輸出,此外還有Web UI。有一組頁面供用戶爲報表創建模板,爲變量替換添加{{}}標籤,以及一個額外的模板標籤庫來很好地設置格式。Django模板引擎與錯誤檢查?
但是,我這樣做是目前的方法就是:
t = Template(component_template)
self.output_content = t.render(component_context)
它使用默認的Web輸出模板引擎。這有string_if_invalid
設置爲None
,如果您更改了管理頁面,可能會在手冊中出現嚴重警告。
因此,如果用戶在一個變量名的標籤要麼得到一個錯字,它正在悄悄地忽略,使得它到輸出。如果他們有一個損壞的標籤,它實際上會殺死Web應用程序。我正在尋找一種在編輯時驗證模板的方法,以便可以警告用戶需要進行更改。
什麼我的目標是一樣的東西編譯器輸出:
unknown variable 'ffsdfd' on line 33 of template
template syntax error on line 22 of template
我首先想到的是要建立一個新的模板引擎(),並使用這一個目的,這樣我就可以發現一個與衆不同的默認string_if_invalid
但並沒有告訴我任何關於的缺少/不正確的變量。
engine = Engine(string_if_invalid="!!MISSING_VARIABLE!!", dirs=settings.TEMPLATES[0]['DIRS'],
context_processors=settings.TEMPLATES[0]['OPTIONS']['context_processors'],
app_dirs=settings.TEMPLATES[0]['APP_DIRS'])
t = Template(component_template, engine=engine)
try:
self.output_content = t.render(component_context)
except TemplateSyntaxError:
pass # do something useful here to collect error messages
的TemplateSyntaxError例外的作品,除了我沒有得到任何上下文信息等,其中的錯誤實際上是,當然我只得到了第一次失敗。查看django.template代碼,看起來像內部看起來有某種擴展異常,它有行號和導致它窒息的標記,但它不會從render()方法中轉義。
因此:
如何爲用戶編輯的模板中的錯誤提供有用的錯誤處理?我應該以完全不同的方式做這件事嗎?
啊!所以實際上我缺少的部分是:「如果string_if_invalid包含'%s',則格式標記將替換爲無效變量的名稱。」 (https://docs.djangoproject.com/en/1.9/ref/templates/api/#invalid-template-variables) (但是從海峽到異常的轉換是好的!) – AnotherHowie