Python render_模板中的烧瓶和芹菜翻译超出应用程序上下文错误
我有一个Flask应用程序,我想从中发送电子邮件,模板中有一个可翻译的字符串,使用Python render_模板中的烧瓶和芹菜翻译超出应用程序上下文错误,python,flask,celery,Python,Flask,Celery,我有一个Flask应用程序,我想从中发送电子邮件,模板中有一个可翻译的字符串,使用Flask Babel @celery.task def send_email(user_email=None): with app.app_context(): html = render_template('user/email_template.html') subject = lazy_gettext(u'Subject Line') send_
Flask Babel
@celery.task
def send_email(user_email=None):
with app.app_context():
html = render_template('user/email_template.html')
subject = lazy_gettext(u'Subject Line')
send_email(user_email, subject, html)
@app.route('/index/', methods=['GET', 'POST'])
@login_required
def index():
...
send_email.delay(
user_email=user.email,
)
email_template.html
当我在没有芹菜的情况下调用send\u email
功能时,不会发生这种情况。我是否必须将应用程序上下文传递给芹菜
注意:为了清楚起见,缩写为
编辑
完整堆栈跟踪:
[2016-03-28 12:08:30528:ERROR/MainProcess]Task main.send_unlock_email[98f520d4-fadf-4272-8c14-17d6c16bf182]引发意外:AttributeError(“非类型”对象没有属性“ugettext”)
回溯(最近一次呼叫最后一次):
trace_任务中的文件“.envs//local/lib/python2.7/site packages/芹菜/app/trace.py”,第240行
R=retval=fun(*args,**kwargs)
文件“.envs//local/lib/python2.7/site packages/芹菜/app/trace.py”,第438行,在uu protected_u调用中__
返回self.run(*args,**kwargs)
文件“flask projects///views/main.py”,第84行,在send\u unlock\u email中
html=render_模板('user/successfull_unlock.html')
文件“.envs//local/lib/python2.7/site packages/flask/templating.py”,第128行,位于render_模板中
上下文(ctx.app)
文件“.envs//local/lib/python2.7/site packages/flask/templating.py”,第110行,在_render中
rv=template.render(上下文)
文件“.envs//local/lib/python2.7/site packages/jinja2/environment.py”,第989行,在渲染中
返回self.environment.handle\u异常(exc\u info,True)
文件“.envs//local/lib/python2.7/site packages/jinja2/environment.py”,第754行,在句柄中
重放(exc_类型、exc_值、tb)
顶级模板代码中的第1行文件“flask projects///templates/user/successfull_unlock.html”
{{{('Email Test')}
文件“.envs//local/lib/python2.7/site-packages/jinja2/ext.py”,第132行,位于
return uuu context.call(uuu context.resolve('gettext'),*args,**kwargs)
文件“.envs//local/lib/python2.7/site packages/jinja2/ext.py”,第138行,在gettext中
rv=\uuuu context.call(func,\uuuuu字符串)
文件“.envs//local/lib/python2.7/site packages/flask_babel/_init__.py”,第116行,in
lambda x:get_translations().ugettext(x),
AttributeError:“非类型”对象没有属性“ugettext”
错误发生在哪一行?错误源于html模板。在底部添加了完整的stacktrace。
<p>{{ _('Email Test') }}</p>
AttributeError: 'NoneType' object has no attribute 'ugettext'
[2016-03-28 12:08:30,528: ERROR/MainProcess] Task main.send_unlock_email[98f520d4-fadf-4272-8c14-17d6c16bf182] raised unexpected: AttributeError("'NoneType' object has no attribute 'ugettext'",)
Traceback (most recent call last):
File "<path>.envs/<env>/local/lib/python2.7/site-packages/celery/app/trace.py", line 240, in trace_task
R = retval = fun(*args, **kwargs)
File "<path>.envs/<env>/local/lib/python2.7/site-packages/celery/app/trace.py", line 438, in __protected_call__
return self.run(*args, **kwargs)
File "<path>flask-projects/<env>/<env>/views/main.py", line 84, in send_unlock_email
html = render_template('user/successfull_unlock.html')
File "<path>.envs/<env>/local/lib/python2.7/site-packages/flask/templating.py", line 128, in render_template
context, ctx.app)
File "<path>.envs/<env>/local/lib/python2.7/site-packages/flask/templating.py", line 110, in _render
rv = template.render(context)
File "<path>.envs/<env>/local/lib/python2.7/site-packages/jinja2/environment.py", line 989, in render
return self.environment.handle_exception(exc_info, True)
File "<path>.envs/<env>/local/lib/python2.7/site-packages/jinja2/environment.py", line 754, in handle_exception
reraise(exc_type, exc_value, tb)
File "<path>flask-projects/<env>/<env>/templates/user/successfull_unlock.html", line 1, in top-level template code
<p>{{ _('Email Test') }}</p>
File "<path>.envs/<env>/local/lib/python2.7/site-packages/jinja2/ext.py", line 132, in _gettext_alias
return __context.call(__context.resolve('gettext'), *args, **kwargs)
File "<path>.envs/<env>/local/lib/python2.7/site-packages/jinja2/ext.py", line 138, in gettext
rv = __context.call(func, __string)
File "<path>.envs/<env>/local/lib/python2.7/site-packages/flask_babel/__init__.py", line 116, in <lambda>
lambda x: get_translations().ugettext(x),
AttributeError: 'NoneType' object has no attribute 'ugettext'