Python flask路由能否同时返回IO流和变量?

Python flask路由能否同时返回IO流和变量?,python,flask,jinja2,Python,Flask,Jinja2,我使用flask路径生成二维码作为字节流,在主页上使用jinja2模板非常简单地称为: #INDEX.HTML <img src="{{ url_for('qr') }}"> 这是一个最小的工作示例,它使用{{cost}和@app.route('/qr/')和{url\u for('qr',cost=cost)}生成的QRcode创建页面 from flask import Flask, render_template_string import pyqrcod

我使用flask路径生成二维码作为字节流,在主页上使用jinja2模板非常简单地称为:

#INDEX.HTML
<img src="{{ url_for('qr') }}">

这是一个最小的工作示例,它使用
{{cost}
@app.route('/qr/')和
{url\u for('qr',cost=cost)}
生成的
QRcode
创建页面

from flask import Flask, render_template_string
import pyqrcode
from io import BytesIO
import random


app = Flask(__name__)


@app.route('/')
def index():
    #conversion = requests.get(API_ADDRESS)
    
    conversion = random.randint(1, 9)
    cost = conversion*10

    return render_template_string('''Cost: {{ cost }}<br>
<img src="{{ url_for('qr', cost=cost) }}">''', cost=cost)


@app.route('/qr/<int:cost>') #, methods=['GET', 'POST'])
def qr(cost):
    base_string = pyqrcode.create(cost, error='H')
    stream = BytesIO()
    base_string.svg(stream, scale=5)

    return stream.getvalue(), 200, {
        'Content-Type': 'image/svg+xml',
        'Cache-Control': 'no-cache, no-store, must-revalidate',
        'Pragma': 'no-cache',
        'Expires': '0'}


if __name__ == '__main__':
    app.run(debug=True, use_reloader=False)
从烧瓶导入烧瓶,呈现\u模板\u字符串
导入pyqrcode
从io导入字节io
随机输入
app=烧瓶(名称)
@应用程序路径(“/”)
def index():
#转换=请求.get(API\U地址)
转换=random.randint(1,9)
成本=换算*10
返回呈现模板字符串(''Cost:{{{Cost}}
'',成本=成本) @app.route('/qr/')#,methods=['GET','POST']) def qr(成本): base_string=pyqrcode.create(成本,错误='H') stream=BytesIO() base_string.svg(流,比例=5) 返回stream.getvalue(),200{ “内容类型”:“图像/svg+xml”, “缓存控制”:“没有缓存,没有存储,必须重新验证”, “Pragma”:“无缓存”, “Expires':“0”} 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 运行(debug=True,use_reloader=False)
最好用使用
{{cost}}
的模板显示代码,因为这是发送值和流的唯一方法。使用
@app.route('/qr/'
{url\u for('qr',value=cost)}有什么问题
?@furas类似的东西是我正在寻找的,但这对我不起作用。它对你起作用了吗?非常感谢你的回答。那么这是否证实路由函数确实不可能同时返回流和变量?它必须在两个单独的路由中完成?流只能发送流。你可以用其他路径发送图像项目作为JSON,但需要JavaScript和AJAX才能获得它,并将其放入HTML中的预期位置。使用
/qr/
生成图像似乎是一种自然的方法-尤其是您需要将
成本
发送到
/qr/
以生成正确的图像。顺便说一句:所有门户/API都是这样工作的-即根据您在url-ie中使用。
from flask import Flask, render_template_string
import pyqrcode
from io import BytesIO
import random


app = Flask(__name__)


@app.route('/')
def index():
    #conversion = requests.get(API_ADDRESS)
    
    conversion = random.randint(1, 9)
    cost = conversion*10

    return render_template_string('''Cost: {{ cost }}<br>
<img src="{{ url_for('qr', cost=cost) }}">''', cost=cost)


@app.route('/qr/<int:cost>') #, methods=['GET', 'POST'])
def qr(cost):
    base_string = pyqrcode.create(cost, error='H')
    stream = BytesIO()
    base_string.svg(stream, scale=5)

    return stream.getvalue(), 200, {
        'Content-Type': 'image/svg+xml',
        'Cache-Control': 'no-cache, no-store, must-revalidate',
        'Pragma': 'no-cache',
        'Expires': '0'}


if __name__ == '__main__':
    app.run(debug=True, use_reloader=False)