【问题标题】:Using multiple HTML buttons to pass if else function in Flask使用多个 HTML 按钮来传递 Flask 中的 if else 功能
【发布时间】:2022-01-03 18:12:58
【问题描述】:

有人问了类似的问题,但我无法让它为我工作,我不确定问题是什么,所以我想我会再问一次,以防有人有一些指示。

我正在尝试在 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 图像。但由于有一些选项,我只想在点击时触发生成。

非常感谢任何帮助

【问题讨论】:

    标签: python html if-statement flask button


    【解决方案1】:

    这似乎已经回答了 - 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 %}
    

    ma​​in.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 %}
    

    ma​​in.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,
        )
    

    【讨论】:

    • 非常感谢您抽出宝贵的时间来回答,非常有帮助
    • @LilyGrogan,是的,我很高兴能帮上忙:D
    猜你喜欢
    • 2020-03-15
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多