![](/img/trans.png)
[英]Why is my Submit button on my Flask Python Web Page redirecting to the same HTML template, and not to a different one?
[英]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.