【问题标题】:How to render dynamic data in Flask / Jinja2 / WTForms?如何在 Flask / Jinja2 / WTForms 中渲染动态数据?
【发布时间】:2020-06-18 12:45:18
【问题描述】:

我正在尝试使用 Jinja2 模板在 Flask 中呈现动态二维码,以便用户单击由 WTForms 管理的“立即购买”按钮,该按钮调用一个函数来呈现支付二维码。

如果我刷新输出,它确实显示为字符串,所以我知道 QRGen 函数正在工作。

我的静态变量都在渲染模板中正确导出,但如果我导出 qr1 我得到以下错误:

UnboundLocalError: 赋值前引用了局部变量 'qr1'

我猜这是因为变量是动态实例化的。代码如下:

#INDEX.HTML

<form action="" role="form" method="post">
            {{ shopform01.hidden_tag() }}
            {{ shopform01.buy01( type="button", class_="button", id="buybutton01", value="Buy Now") }}
            </form>

{{ qr1 }}

#MODELS.PY

from flask_qrcode import QRcode

def QRGen(id,price):
    nanodress = app.config['NANO']
    buytime = str(datetime.now().strftime("%y%m%d%H%M%S%f"))
    nanoprice = requests.get("https://api.coingecko.com/api/v3/simple/price?ids=nano&vs_currencies=usd").json()["nano"]["usd"]
    bits = "nano:"+nanodress+"?amount="+str(price/nanoprice*0.0000000001)+buytime+id

    def __repr__(self,bits):
        return QRcode.qrcode(self.bits, error_correction='H', fill_color='#802929', icon_img='shop/nano.png')

#ROUTES.PY

from app.models import QRGen

@app.route('/index', methods=['GET', 'POST'])
def index():

...

    price01 = 10

    shopform01 = Buy01()
    if shopform01.validate_on_submit():
        qr1 = QRGen("01",price01)

...

return render_template('index.html', title='Home', shopform01=shopform01)

【问题讨论】:

    标签: flask jinja2 flask-wtforms wtforms


    【解决方案1】:

    在 routes.py 中索引函数的最后一行传递一个qr1=qr1

    return render_template('index.html', title='Home', shopform01=shopform01, qr1=qr1)

    希望对你有帮助。

    【讨论】:

    • 谢谢,但它给了我这个错误:UnboundLocalError: local variable 'qr1' referenced before assignment.
    • 您是否在其他文件或 routes.py 的其他地方使用过 qr1 变量。尝试在索引函数的开头分配qr1=None,然后在 if 块中重新分配
    猜你喜欢
    • 2018-09-27
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2019-09-23
    相关资源
    最近更新 更多