【问题标题】:How to tell if there's a render error when manually rendering a Django template?手动渲染 Django 模板时如何判断是否存在渲染错误?
【发布时间】:2014-01-03 17:30:38
【问题描述】:

我将 Django 模板系统用于一些表单电子邮件,最终用户可以编辑模板。

模板的render 方法返回呈现的内容并静默传递无效变量和标签。有没有合理的方法来判断渲染过程中是否有错误?

我正在考虑将settings.TEMPLATE_STRING_IF_INVALID 设置为一个唯一的字符串,然后测试该字符串是否存在,但这会影响正常的模板渲染,这是不可接受的。我已经扫描了 Django 的源代码,希望有一个“渲染无效变量/标签”方法我可以干净地覆盖以引发异常,但没有这样的运气。

有什么想法吗?

【问题讨论】:

    标签: python django templates


    【解决方案1】:

    可悲的是,像这样解决问题是最好的解决方案。需要注意的是,该变量被称为TEMPLATE_STRING_IF_INVALID btw。

    另外,我建议将 Jinja2 与 Coffin 一起使用,这也使调试更加容易,而且 Jinja2 实际上确实为此类错误提供了适当的堆栈跟踪。

    【讨论】:

    • 感谢拼写检查 -- 已更正。你说的乱七八糟的意思是……?
    • 我的意思是,在使用 Django 模板系统时,使用您提出的方法是目前最好的,实际上也是唯一的解决方案。
    【解决方案2】:

    也许您可以在Jinja2 中编写模板。它比 Django 的模板语言强大一点,但可以对不存在的变量抛出异常——而且语法非常相似。

    它还提供了类似的 render 等函数来完成您的要求,而不会影响您的 Django 项目的任何其余部分。

    例如:

    >>> from jinja2 import Environment, StrictUndefined
    >>> env = Environment(undefined=StrictUndefined)
    >>> template = env.from_string('Say hello to {{name}}')
    >>> 
    >>> template.render()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 969, in render
         return self.environment.handle_exception(exc_info, True)
      File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 742, in handle_exception
         reraise(exc_type, exc_value, tb)
      File "<template>", line 1, in top-level template code
    jinja2.exceptions.UndefinedError: 'name' is undefined
    >>>
    >>> template.render({'name': 'Ben'})
    u'Say hello to Ben'
    >>>
    >>> template.render(name='Ben')
    u'Say hello to Ben'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多