从 Flask 中的变量渲染按钮
Rendering buttons from variables in Flask
我正在尝试使用 Flask 创建一个页面,该页面的按钮名称和操作是在代码的 python 部分而不是 HTML 部分中定义的。
代码的最小工作示例如下所示:
main.py:
from flask import Flask
def init_app():
"""Construct core Flask application with embedded Dash app."""
app = Flask(__name__)
with app.app_context():
# Import parts of our core Flask app
import routes
return(app)
app = init_app()
if __name__ == "__main__":
app.run(debug = True)
routes.py:
from flask import render_template, redirect, request
from flask import current_app as app
@app.route('/', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
print(request.form.get('test_action'))
print(request.form.get('extra_action'))
elif request.method == 'GET':
return render_template('buttons.html', form="form", extra_name = "Extra_Name", extra_action = "extra_action")
return render_template("buttons.html", extra_name = "Extra_Name", extra_action = "extra_action")
和templates/buttons.html
<form method="post" action="/">
<h4>button name: TEST</h4>
<h4>button action: test_action</h4>
<input type="submit" value="TEST" name="test_action"/>
<h4>button name: {{extra_name}}</h4>
<h4>button action: {{extra_action}}</h4>
<input type="submit" value={{extra_name}} name={{extra_action}}/>
</form>
呈现如下:
main.py 正在初始化所有内容,其中没有发生任何相关的事情。
在routes.py中,按钮名称和动作名称被传递给HTML代码。 HTML 代码创建了两个按钮:一个使用硬编码的名称,另一个使用从 Flask 中获取的名称。然后 routes.py 打印它从每个按钮获得的值。例如,当程序第一次启动时,它打印
None
None
如果按下测试按钮,它将打印
TEST
None
现在,据我了解,当按下 Extra_name 按钮时,它应该输出
None
Extra_name
如果我在 Extra_name 和 extra_action 我自己分到他们应该去 HTML 的地方,这也是它的工作方式,但它给出了
None
None
我知道 HTML 可以看到 {{extra_name}}
和 {{extra_action}}
是什么,因为它正上方将它们呈现为文本,因此据我所知,将值替换为两段代码是相同的。因此我不明白为什么一个有效而另一个无效。
那是因为
<input type="submit" value={{extra_name}} name={{extra_action}}/>
会给你 extra_action/ 而不是 extra_action
您可以使用
修复它
<input type="submit" value={{extra_name}} name={{extra_action}}></input>
结果:
None
Extra_Name
我正在尝试使用 Flask 创建一个页面,该页面的按钮名称和操作是在代码的 python 部分而不是 HTML 部分中定义的。
代码的最小工作示例如下所示: main.py:
from flask import Flask
def init_app():
"""Construct core Flask application with embedded Dash app."""
app = Flask(__name__)
with app.app_context():
# Import parts of our core Flask app
import routes
return(app)
app = init_app()
if __name__ == "__main__":
app.run(debug = True)
routes.py:
from flask import render_template, redirect, request
from flask import current_app as app
@app.route('/', methods=['GET', 'POST'])
def home():
if request.method == 'POST':
print(request.form.get('test_action'))
print(request.form.get('extra_action'))
elif request.method == 'GET':
return render_template('buttons.html', form="form", extra_name = "Extra_Name", extra_action = "extra_action")
return render_template("buttons.html", extra_name = "Extra_Name", extra_action = "extra_action")
和templates/buttons.html
<form method="post" action="/">
<h4>button name: TEST</h4>
<h4>button action: test_action</h4>
<input type="submit" value="TEST" name="test_action"/>
<h4>button name: {{extra_name}}</h4>
<h4>button action: {{extra_action}}</h4>
<input type="submit" value={{extra_name}} name={{extra_action}}/>
</form>
呈现如下:
main.py 正在初始化所有内容,其中没有发生任何相关的事情。
在routes.py中,按钮名称和动作名称被传递给HTML代码。 HTML 代码创建了两个按钮:一个使用硬编码的名称,另一个使用从 Flask 中获取的名称。然后 routes.py 打印它从每个按钮获得的值。例如,当程序第一次启动时,它打印
None
None
如果按下测试按钮,它将打印
TEST
None
现在,据我了解,当按下 Extra_name 按钮时,它应该输出
None
Extra_name
如果我在 Extra_name 和 extra_action 我自己分到他们应该去 HTML 的地方,这也是它的工作方式,但它给出了
None
None
我知道 HTML 可以看到 {{extra_name}}
和 {{extra_action}}
是什么,因为它正上方将它们呈现为文本,因此据我所知,将值替换为两段代码是相同的。因此我不明白为什么一个有效而另一个无效。
那是因为
<input type="submit" value={{extra_name}} name={{extra_action}}/>
会给你 extra_action/ 而不是 extra_action
您可以使用
修复它<input type="submit" value={{extra_name}} name={{extra_action}}></input>
结果:
None
Extra_Name