Flask+Jinja2环境下{{ }}无法渲染Python变量output问题排查
问题修复方案
你的代码存在两处核心错误导致无法正常渲染结果,直接按以下方案修改即可:
1. 前端表单提交按钮错误
当前HTML中的按钮类型为button,默认没有表单提交行为,点击后不会触发后端POST逻辑,自然不会返回生成结果。同时按钮标签未闭合。
修改代码如下:
<!-- 把原来的button标签替换成下面的内容 --> <button type="submit" value="Submit">生成卡号</button>
2. 后端return语句缩进错误
你当前的return render_template('index.html', output=output)写在while循环内部,第一次循环执行完就会直接返回,根本不会跑完指定数量的卡号生成逻辑。需要把这行的缩进调整到while循环外面,同时把Luhn算法函数移到循环外部避免重复定义,优化后完整Python代码如下:
import random from flask import Flask, render_template, request, url_for app = Flask(__name__) # Luhn算法单独抽出来,不要放在循环或者请求逻辑里重复定义 def luhn_checksum(card_number): def digits_of(n): return [int(d) for d in str(n)] digits = digits_of(card_number) odd_digits = digits[-1::-2] even_digits = digits[-2::-2] checksum = 0 checksum += sum(odd_digits) for d in even_digits: checksum += sum(digits_of(d * 2)) return checksum % 10 @app.route('/', methods=['GET', 'POST']) def function1(): output = '' # 提前初始化空值,避免Jinja2渲染警告 if request.method == 'POST': Bin = request.form.get('Bin') quantity = int(request.form.get('quantity')) x = 0 good = 16 - len(Bin) exp_month_list = ['01','02','03','04','05','06','07','08','09','10','11','12'] while x != quantity: r = str(random.randint(pow(10, good - 1), pow(10, good)- 1)) iccnum = Bin + r if luhn_checksum(int(iccnum)) == 0: ccnum = str(iccnum) exp_month = random.choice(exp_month_list) exp_year = str(random.randint(2022, 2026)) cvv = str(random.randint(100, 999)) CC = f"{ccnum}|{exp_month}|{exp_year}|{cvv}\n" output += CC x += 1 # 调整缩进:循环跑完所有数量生成后再返回 return render_template('index.html', output=output) return render_template('index.html', output=output) if __name__ == '__main__': app.run()
可选优化:解决换行不显示问题
默认<p>标签无法识别\n换行符,所有生成结果会挤在同一行,把输出区域的标签替换为<pre>即可保留换行格式:
<pre>Output: {{output}}</pre>
内容的提问来源于stack exchange,提问作者Fiery King
相关产品推荐
相关产品推荐

