我有一个大量使用jinja2的应用程序。有时,我搞砸了并从过滤器返回一个非字符串。 (或者我通过我的所有分支条件并返回无)Jinja然后尽职尽责地将我给它的任何东西转换为字符串。
我希望Jinja不这样做。我希望Jinja反而抛出异常,崩溃,真的,只是告诉我出了什么问题。我怎么能这样做?
答案 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
。