我从Nereid 3.2获得了最大的递归深度误差。 我发现此错误的主要原因是jinja模板中的Babel dateformat filter,如
{{ blog_date | dateformat(format='MMM YY') }}
在调试时我发现可能是Nereid的speaklater,因为延迟呈现功能导致了这个问题。
答案 0 :(得分:3)
最后我得到了解决方案,这就是我到达那里的方式。
使用flask的递归深度错误的问题是不容易找到问题的根本原因,因此使用命中和试验方法我得到了问题的尾部。
方法调用流程如下:
dateformat过滤器> format_date()> to_user_timezone()> get_timezone()
现在将时区方法覆盖为here:
def get_timezone():
"""
Returns the timezone that should be used for this request as
`pytz.timezone` object. This returns `None` if used outside of
a request.
"""
ctx = _request_ctx_stack.top
tzinfo = getattr(ctx, 'babel_tzinfo', None)
if tzinfo is None:
babel = ctx.app.extensions['babel']
if babel.timezone_selector_func is None:
if not current_user.is_anonymous() and current_user.timezone:
tzinfo = timezone(current_user.timezone)
else:
tzinfo = timezone(ctx.request.nereid_website.timezone)
else:
rv = babel.timezone_selector_func()
if rv is None:
tzinfo = babel.default_timezone
else:
if isinstance(rv, basestring):
tzinfo = timezone(rv)
else:
tzinfo = rv
ctx.babel_tzinfo = tzinfo
return tzinfo
flask.ext.babel.get_timezone = get_timezone
来自here,它在nereid_website中调用function field timezone,默认情况下返回公司的timezone,这是一个不需要的字段。
最后,我已在PR#229修复了此问题。欢迎评论者!