gpt4 book ai didi

python - jinja2:如何让它像 django 模板一样无声地失败

转载 作者:太空狗 更新时间:2023-10-30 00:46:41 25 4
gpt4 key购买 nike

好吧,我没有找到答案,我确信这很简单,但我只是不知道如何在找不到变量时让它像 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:

{%for dir_name, links in menu_links.items()%}

最佳答案

您正试图任意深入到未定义的数据中。 menu_links 未定义,因此 Jinja2 创建了一个新的 UndefinedSilently 类实例。然后它调用此对象的 __getattr__ 方法来获取 items 属性。这将返回一个空白的 unicode 字符串。哪个 Python 然后尝试调用(menu_links.items()())。这引发了 unicode 对象不是可调用对象的错误。

即:

menu_links.items() # becomes
UndefinedSilently().items() # becomes
UndefinedSilently().u''() # from UndefinedSilently.__getattr__

如果您希望能够比一个级别更深入,您可以创建一个类,它会在每次访问尝试时返回自身,__str____unicode__ 除外。

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

return_new = lambda *args, **kwargs: UndefinedSilently()

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

关于python - jinja2:如何让它像 django 模板一样无声地失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6182498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com