如何在不使用请求上下文的情况下在flask中呈现模板

VED*_*095 2 python return jinja2 flask

所以我正在为这个项目开发这个烧瓶应用程序,我需要它在定时变量的循环中运行,以检查某些变量的状态,然后相应地给出输出.但是,我遇到的问题是我需要在循环重启之前在Flask中渲染模板.在http://flask.pocoo.org/上的更改日志中,它表明可以在不使用请求上下文的情况下呈现模板,但我还没有看到任何真实的例子.那么有没有办法在Flask中呈现模板而不必使用请求上下文而不会出现任何错误?任何可以给予的帮助表示赞赏.

更新:这是我正在使用的代码

from flask import Flask, render_template, request, flash, redirect, url_for
import flask
import time
from flask.ext.assets import Environment, Bundle
from flask_wtf import Form 
from wtforms import TextField, TextAreaField, SubmitField
from wtforms.validators import InputRequired

CSRF_ENABLED = True
app = Flask(__name__)
app.secret_key = 'development key'
app = flask.Flask('my app')
assets = Environment(app)
assets.url = app.static_url_path
scss = Bundle('scss/app.scss', filters='scss', output='css/app.css')
assets.register('app_scss', scss)

@app.route('/')
def server_1():
    r=1
    g=2
    b=3
    i=g
    if i == g:
        with app.app_context():
            print "Loading Template..."
            rendered = flask.render_template('server_1.html', green=True)
            print "Success! Template was loaded with green server status..."
            time.sleep(5)


if __name__ == '__main__':
    app.run(port=5000, debug=True)
Run Code Online (Sandbox Code Playgroud)

mha*_*wke 17

您可以通过将应用程序绑定为当前应用程序来完成此操作.然后,您可以使用render_template()从模板目录render_template_string()中呈现模板,或直接从存储在字符串中的模板进行渲染:

import flask
app = flask.Flask('my app')

with app.app_context():
    context = {'name': 'bob', 'age': 22}
    rendered = flask.render_template('index.html', **context)

with app.app_context():
    template = '{{ name }} is {{ age }} years old.'
    context = {'name': 'bob', 'age': 22}
    rendered = flask.render_template_string(template, **context)
Run Code Online (Sandbox Code Playgroud)

或者你可以绕过Flask并直接进入Jinja2:

import jinja2
template = jinja2.Template('{{ name }} is {{ age }} years old.')
rendered = template.render(name='Ginger', age=10)
Run Code Online (Sandbox Code Playgroud)

更新

您似乎可能希望将内容流式传输回请求客户端.如果是这样,你可以写一个发电机.像这样的东西可能会起作用:

import time
from flask import Flask, Response, render_template_string
from flask import stream_with_context

app = Flask(__name__)

@app.route("/")
def server_1():
    def generate_output():
        age = 0
        template = '<p>{{ name }} is {{ age }} seconds old.</p>'
        context = {'name': 'bob'}
        while True:
            context['age'] = age
            yield render_template_string(template, **context)
            time.sleep(5)
            age += 5

    return Response(stream_with_context(generate_output()))

app.run()
Run Code Online (Sandbox Code Playgroud)

以下是有关Flask流媒体的一些文档.