错误:使用带有Nereid的flask-babel方法的最大递归深度

时间:2014-11-18 15:38:26

标签: python flask tryton

我从Nereid 3.2获得了最大的递归深度误差。 我发现此错误的主要原因是jinja模板中的Babel dateformat filter,如

{{ blog_date | dateformat(format='MMM YY') }}

在调试时我发现可能是Nereid的speaklater,因为延迟呈现功能导致了这个问题。

1 个答案:

答案 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修复了此问题。欢迎评论者!