gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:33:17 26 4
gpt4 key购买 nike

所以我正在为这个项目开发这个 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)

最佳答案

您可以通过将您的应用程序绑定(bind)为当前应用程序来实现。然后,您可以使用 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)

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

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

更新

看来您可能想要将内容流式传输回请求客户端。如果是这样,您可以编写一个生成器。这样的事情可能会起作用:

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()

这是一些 documentation关于使用 Flask 进行流式传输。

关于python - 如何在不使用请求上下文的情况下在 flask 中呈现模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31830663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com