关闭自动转换为jinja2表达式字符串

时间:2015-06-09 22:14:35

标签: python jinja2

我有一个大量使用jinja2的应用程序。有时,我搞砸了并从过滤器返回一个非字符串。 (或者我通过我的所有分支条件并返回无)Jinja然后尽职尽责地将我给它的任何东西转换为字符串。

我希望Jinja不这样做。我希望Jinja反而抛出异常,崩溃,真的,只是告诉我出了什么问题。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您可能会编写一个装饰器来检查过滤器的返回值,如果它不是字符串,则会引发异常。对于奖励积分,您可以检查__debug__,以便在生产中将其删除,以便在这些情况下实现零性能。

import functools

def must_return_str(func):

    if not __debug__: return func

    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        ret = func(*args, **kwargs)
        if isinstance(ret, str):
            return ret
        raise TypeError(func.__name__ + " did not return a string")

    return wrapper

@must_return_str
def foo():
    return

foo()

下行是您必须以这种方式将其应用于您希望保护的每个功能。说实话,我不太了解Jinja,但是你可以编写一个函数来将这个装饰器应用到模块中的每个函数,或类似的东西,所以你不会这样做。需要反复手动编写@must_return_str