繁体   English   中英

使用 flask 和 python 更新提交按钮上的 HTML 页面

[英]Update HTML page on submit button with flask and python

我想要实现的目标:我正在创建这个小型 web 应用程序,它将通过 telnet 连接到给定的 ip/s、发送一些命令、获取一些响应并在 html 页面中显示它们。 我上面提到的一切都将发生在同一页面上。 大多数东西都在工作。

问题:我正在尝试显示从这些 ip/s 返回的响应/s,在我提交 telnet 命令的同一个 HTML 页面中,按下submit按钮后在textarea中。 响应以列表 player_responses 的形式发送回player_responses 现在发生的事情是我的循环为响应列表中的每个元素创建了一个新的textarea ,这并不酷。 ![current behavior] https://imgur.com/a/4PCNEjs我只想用所有响应更新已经存在的textarea 这发生在我的player-poll.html中的<div id="console">

免责声明:我是菜鸟,大部分时间都不知道自己在做什么。

为了我的辩护,我浏览了建议的帖子并自己进行了一些研究,但没有找到解决我困境的答案。

应用程序.py

@app.route('/player-poll', methods=['GET', 'POST'])
def player_poll():
    form = PlayerPollForm()
    player_responses = []
    if request.method == 'POST':
        for i in form.ip_addr.data.split():
            player_responses.append(f'Response from {i} is TELNET_ RESPONSE')
            print(f'Item fount {i}')
        print(player_responses)
    return render_template('player-poll.html', title='Player Poll', form=form, len_player_responses=len(player_responses), player_responses=player_responses)

forms.py


class PlayerPollForm(FlaskForm):
    ip_addr = TextAreaField('Players IP address one per line:', validators=[DataRequired()])
    cmd = StringField('Command:', validators=[DataRequired()])
    freq = FloatField('Frequency in sec:', validators=[DataRequired()])
    count = IntegerField('Number of Iterations:', validators=[DataRequired()])
    submit = SubmitField('Send Command')
    logs = TextAreaField('Player Logs:')

玩家投票.html

{% extends "template_layout.html" %}
{% block content %}
    <div class="content-section">
        <form action="{{ url_for('player_poll') }}" method="POST">
            {{ form.hidden_tag() }}
            <fieldset class="form-group">
                <div class="form-group">
                    <legend class="border-bottom mb-4">Player Poll</legend>
                    <div id="row-1" class="row">
                        <div id="col-1" class="col">
                            {{ form.ip_addr.label(class="form-control-label") }}
                        </div>
                    </div>
                    <div id="row-2" class="row">
                        <div id="col-1" class="col">
                            {{ form.ip_addr(class="form-control", rows="10", placeholder="Type your player ip addresses here, one per line.") }}
                        </div>
                        <div id="col-2" class="col">
                            <div id="row-2-6" class="row" style="padding-right: 15px">
                                <div class="col-sm-8 text-left" style="padding-left: 0">
                                    {{ form.submit(class="btn btn-primary btn-lg") }}
                                </div>
                            </div>
                        </div>
                    </div>
                    <div id="console" class="row" style="padding-left: 15px; padding-right: 15px">
                        <legend class="border-bottom mb-2">Player Poll Logs:</legend>
                        <textarea id=playerPollLog class="form-control form-group" rows=17">Responses</textarea>
                        {% if request.method == 'POST' %}
                            {% for i in range(0, len_player_responses) %}
                                <textarea id=playerPollLog class="form-control form-group" rows=17">{{ player_responses[i] }}</textarea>
                            {% endfor %}
                        {% endif %}
                    </div>
                </div>
            </fieldset>
        </form>
    </div>
{% endblock content %}

我不知道我是否理解 - 但如果你只想要一个 textarea 然后不要在for -loop 中创建它们,而是在现有<textarea>中使用for -loop

   <textarea id=playerPollLog class="form-control form-group" rows="17">Responses
        {% for response in player_responses %}
            {{ response }}
        {% endfor %}
   </textarea>

最终,您可以连接app.py中的所有响应并将其作为单个字符串发送到 tempalte - 即。 player_all_responses

   <textarea id=playerPollLog class="form-control form-group" rows="17">Responses
        {{ player_all_responses }}
   </textarea>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM