【发布时间】:2021-12-22 07:50:31
【问题描述】:
我构建了一个烧瓶应用程序,它应该在通过过滤器后显示数据框。为此,我使用 Flask-WTF 创建了一个表单来请求特定的过滤器,然后应用它。我需要在提交表单时显示数据框结果。所以我将数据框结果的可见性设置为隐藏,并添加了一个事件 onclick {{ form.submit(onclick="showResult()") }}。但是当我点击提交按钮时,结果会短暂出现,然后在表单加载完成后消失。代码如下:
server.py
def get_df():
df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
'B': [5, 6, 7, 8, 9],
'C': ['a', 'b', 'c', 'd', 'e']})
return df
@app.route('/', methods=("POST", "GET"))
def index():
df_result = get_df()
form = NameForm()
message = ""
if form.validate_on_submit():
name = form.name.data
df_result = df_result.loc[df_result['C']==name]
message = 'your input is ' + name
return render_template('index.html', tables=[df_result.to_html(classes='data', header="true")], form=form, message=message)
index.html
{% extends 'layout.html' %}
{% block content %}
<form method=post>
{{ form.csrf_token }}
{{ form.name }}
{{ form.submit(onclick="showResult()") }}
</form>
<p class="pt-5"><strong>{{ message }}</strong></p>
<div id="result" style="visibility:hidden;">
{% for table in tables %}
{{ table|safe }}
{% endfor %}
</div>
{% endblock %}
javascript.js
function showResult()
{
document.getElementById('result').style.visibility = 'visible'
}
您能否帮助弄清楚为什么 javascript 上的可见性样式不存在?
【问题讨论】:
-
对我来说
showResult完全没用。当您单击时,showResult为数据框提供可见位置(但还没有新的数据框),然后它将表单发送到烧瓶以生成新的数据框,然后再次发送所有 HTML - 使用hidden- 所以它隐藏了新的数据框.我会在没有showResult和style="visibility:hidden;"的情况下做到这一点 -
如果你想使用
showResult,那么你需要JavaScript代码,将表单数据作为AJAX发送到服务器,从服务器获取结果,并替换id="result"中的值。 -
很快 - 因为
flask生成新的HTML和style="visibility:hidden;",所以它不会存在。和浏览器重新加载所有 HTML。 -
如果您不想在开始时看到表格,那么最好在
request.method == "GET"时发送空的tables=[]
标签: javascript python flask flask-wtforms