jinja2:如何让它像Djangotemp一样悄无声息地失败

2024-03-29 00:56:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我没有找到答案,我确信它很简单,但是我不知道如何让它像Django一样工作,当它找不到变量时

我试图使用Undefined和创建我自己的Undefined,但它给我带来了属性错误等问题

def silently(*args, **kwargs):
    return u''

class UndefinedSilently(Undefined):
    __unicode__ = silently
    __str__ = silently
    __call__ = silently
    __getattr__ = silently

但当我在这里尝试时,它失败了TypeError: 'unicode' object is not callable

^{pr2}$

Tags: django答案return属性def错误unicodeargs
1条回答
网友
1楼 · 发布于 2024-03-29 00:56:10

你试图任意深入你的未定义数据。menu_links未定义,因此Jinja2为您的UndefinedSilently类创建一个新实例。然后调用这个对象的__getattr__方法来获得items属性。这将返回一个空的unicode字符串。然后Python尝试调用它(即menu_links.items()())。这会产生一个错误,即unicode对象不可调用。在

即:

^{1}$

如果您希望能够深入到一个级别以上,那么可以创建一个类,该类在每次访问尝试时返回自身,除了__str____unicode__。在

^{pr2}$

相关问题 更多 >