Flask中使用多个HTML按钮传递if else函数
Using multiple HTML buttons to pass if else function in Flask
有人问过类似的问题,但我无法让它为我工作,我不确定问题出在哪里,所以我想我会再问一次,以防有人有一些指点。
我正在尝试根据在网页上按下的按钮在 Flask 中传递一个函数。这些是 HTML 按钮:
<div class="row">
<h2>Your Wordclouds:</h2>
<input type="submit" name="submit_button" value="Positive" class='btn'>
<input type="submit" name="submit_button" value="Negative" class='btn'>
{{value}}
</div>
我的函数:
@app.route('/insight', methods=['GET', 'POST'])
def wordcloud():
if request.method == 'POST':
if request.form['submit_button'] == "Positive":
mysql.connection.cursor()
query = ("SELECT journal_entry FROM journals WHERE sentiment = 'positive'")
df = pd.read_sql(query, mysql.connection)
journal_entry = df['journal_entry']
long_string = (''.join(str(journal_entry.tolist())))
# Create WordCloud object
wordcloud = WordCloud(background_color="white", max_words=4500, contour_width=6, contour_color='blue')
# Generate the cloud
wordcloud.generate(long_string)
wordcloud.to_file("wordcloud.png")
filename = Image.open("wordcloud.png")
main_themes = filename.show()
elif request.form['submit_button'] == "Negative":
mysql.connection.cursor()
query = ("SELECT journal_entry FROM journals WHERE sentiment = 'negative'")
df = pd.read_sql(query, mysql.connection)
journal_entry = df['journal_entry']
long_string = (''.join(str(journal_entry.tolist())))
# Create WordCloud object
wordcloud = WordCloud(background_color="white", max_words=500, contour_width=6, contour_color='blue')
# Generate the cloud
wordcloud.generate(long_string)
wordcloud.to_file("wordcloud.png")
filename = Image.open("wordcloud.png")
main_themes = filename.show()
return render_template('insight.html', value=main_themes)
else:
return render_template('insight.html')
当我使用 GET 方法时,这些函数单独运行良好,并且在页面加载时自动生成 wordcloud 图像。但由于有选项,我只想在点击时触发生成。
非常感谢任何帮助
这似乎已经回答了 - two buttons form
下面是一些针对您的问题的代码:
1.使用 request.form
的 .get
方法:
(我个人更喜欢这个,因为你不依赖于输入值,它可以超时改变)
insight_1.html:
<form action="{{ url_for('wordcloud_1') }}" method="POST">
<input type="submit" name="submit_button_1" value="Positive">
<input type="submit" name="submit_button_2" value="Negative">
</form>
{% if value %}
{{value}}
{% endif %}
main.py:
@app.route('/insight_1', methods=['GET', 'POST'])
def wordcloud_1():
# Default value
value = None
if request.method == 'POST':
submit_button_1 = request.form.get('submit_button_1', None)
submit_button_2 = request.form.get('submit_button_2', None)
if submit_button_1:
# Do your stuff
value = 'Some result if submit_button_1 was pressed'
elif submit_button_2:
# Do your stuff
value = 'Some result if submit_button_2 was pressed'
return render_template(
'insight_1.html',
value=value,
)
2。对两个提交元素使用相同的 name
属性:
insight_2.html:
<form action="{{ url_for('wordcloud_2') }}" method="POST">
<input type="submit" name="submit_button" value="Positive">
<input type="submit" name="submit_button" value="Negative">
</form>
{% if value %}
{{value}}
{% endif %}
main.py:
@app.route('/insight_2', methods=['GET', 'POST'])
def wordcloud_2():
# Default value
value = None
if request.method == 'POST':
submit_button = request.form['submit_button']
if submit_button == 'Positive':
# Do your stuff
value = 'Some result if submit_button_1 was pressed'
elif submit_button == 'Negative':
# Do your stuff
value = 'Some result if submit_button_2 was pressed'
return render_template(
'insight_2.html',
value=value,
)
有人问过类似的问题,但我无法让它为我工作,我不确定问题出在哪里,所以我想我会再问一次,以防有人有一些指点。
我正在尝试根据在网页上按下的按钮在 Flask 中传递一个函数。这些是 HTML 按钮:
<div class="row">
<h2>Your Wordclouds:</h2>
<input type="submit" name="submit_button" value="Positive" class='btn'>
<input type="submit" name="submit_button" value="Negative" class='btn'>
{{value}}
</div>
我的函数:
@app.route('/insight', methods=['GET', 'POST'])
def wordcloud():
if request.method == 'POST':
if request.form['submit_button'] == "Positive":
mysql.connection.cursor()
query = ("SELECT journal_entry FROM journals WHERE sentiment = 'positive'")
df = pd.read_sql(query, mysql.connection)
journal_entry = df['journal_entry']
long_string = (''.join(str(journal_entry.tolist())))
# Create WordCloud object
wordcloud = WordCloud(background_color="white", max_words=4500, contour_width=6, contour_color='blue')
# Generate the cloud
wordcloud.generate(long_string)
wordcloud.to_file("wordcloud.png")
filename = Image.open("wordcloud.png")
main_themes = filename.show()
elif request.form['submit_button'] == "Negative":
mysql.connection.cursor()
query = ("SELECT journal_entry FROM journals WHERE sentiment = 'negative'")
df = pd.read_sql(query, mysql.connection)
journal_entry = df['journal_entry']
long_string = (''.join(str(journal_entry.tolist())))
# Create WordCloud object
wordcloud = WordCloud(background_color="white", max_words=500, contour_width=6, contour_color='blue')
# Generate the cloud
wordcloud.generate(long_string)
wordcloud.to_file("wordcloud.png")
filename = Image.open("wordcloud.png")
main_themes = filename.show()
return render_template('insight.html', value=main_themes)
else:
return render_template('insight.html')
当我使用 GET 方法时,这些函数单独运行良好,并且在页面加载时自动生成 wordcloud 图像。但由于有选项,我只想在点击时触发生成。
非常感谢任何帮助
这似乎已经回答了 - two buttons form
下面是一些针对您的问题的代码:
1.使用 request.form
的 .get
方法:
(我个人更喜欢这个,因为你不依赖于输入值,它可以超时改变)
insight_1.html:
<form action="{{ url_for('wordcloud_1') }}" method="POST">
<input type="submit" name="submit_button_1" value="Positive">
<input type="submit" name="submit_button_2" value="Negative">
</form>
{% if value %}
{{value}}
{% endif %}
main.py:
@app.route('/insight_1', methods=['GET', 'POST'])
def wordcloud_1():
# Default value
value = None
if request.method == 'POST':
submit_button_1 = request.form.get('submit_button_1', None)
submit_button_2 = request.form.get('submit_button_2', None)
if submit_button_1:
# Do your stuff
value = 'Some result if submit_button_1 was pressed'
elif submit_button_2:
# Do your stuff
value = 'Some result if submit_button_2 was pressed'
return render_template(
'insight_1.html',
value=value,
)
2。对两个提交元素使用相同的 name
属性:
insight_2.html:
<form action="{{ url_for('wordcloud_2') }}" method="POST">
<input type="submit" name="submit_button" value="Positive">
<input type="submit" name="submit_button" value="Negative">
</form>
{% if value %}
{{value}}
{% endif %}
main.py:
@app.route('/insight_2', methods=['GET', 'POST'])
def wordcloud_2():
# Default value
value = None
if request.method == 'POST':
submit_button = request.form['submit_button']
if submit_button == 'Positive':
# Do your stuff
value = 'Some result if submit_button_1 was pressed'
elif submit_button == 'Negative':
# Do your stuff
value = 'Some result if submit_button_2 was pressed'
return render_template(
'insight_2.html',
value=value,
)