定期呈现没有上下文的HTML

我想有一个周期性的任务,它呈现一个html文件并通过boto将它上传到s3。

问题在于,由于任务不在端点函数之外(即由app.route装饰),因此没有Flask上下文。 所以,当我的任务执行并且render_template被调用时,由于没有上下文而存在异常:

Traceback ........
    File "/usr/local/lib/python2.7/site-packages/flask/templating.py", line 126, in render_template
    ctx.app.update_template_context(context)
AttributeError: 'NoneType' object has no attribute 'app'

我的任务是这样初始化的,我在那里传递我想定期执行的函数:

HtmlUploader.new(
    lambda: render_template('something.html', value=get_value())
).start()

有什么方法可以在应用程序端点函数之外调用render_template吗?


使用render_template()渲染模板需要请求上下文。

您可以轻松创建一个用于批处理的程序:

def render_with_context(template, _url='/', **kw):
    with app.test_request_context(url):
        return render_template(template, **kw)

这会为给定的URL产生'测试'请求(默认为/ )。 然后你可以使用这个:

HtmlUploader.new(
    lambda: render_with_context('something.html', value=get_value())
).start()
链接地址: http://www.djcxy.com/p/71891.html

上一篇: periodically rendering html without context

下一篇: replace div content using ajax and jquery