如何在Mako运行时环境中优雅地处理NameError和AttributeError?

Dav*_*Eyk 4 python templates template-engine mako

我发现尝试在Mako模板中访问一个未定义的变量会引发一个NameError,而且逻辑上也是如此.然而,在某些应用程序中,希望更优雅地失败,或许在这些错误上替换空字符串(AttributeError是另一个候选者).这是Django模板语言中的默认行为.有没有办法在Mako中获得这种行为?

Dav*_*Eyk 11

好吧,事实证明,更多的谷歌搜索使它显而易见:

import mako.runtime
mako.runtime.UNDEFINED = ''
Run Code Online (Sandbox Code Playgroud)

现在未定义的变量将产生空字符串.

阅读UNDEFINED原始值的来源是有启发性的:

class Undefined(object):
    """Represents an undefined value in a template.

    All template modules have a constant value 
    ``UNDEFINED`` present which is an instance of this
    object.

    """
    def __str__(self):
        raise NameError("Undefined")
    def __nonzero__(self):
        return False
Run Code Online (Sandbox Code Playgroud)

我们走了.谢谢,谷歌.