Flask - 将列表传递给新视图
Flask - Passing a List to a new View
我正在使用 Flask 和所有相关框架和库(Jinja、WTForms 等...)构建一个 Web 应用程序。这是我第一次使用 Flask 并构建一个合适的 Web 应用程序。我无法弄清楚如何访问应用程序目录文件中不同函数的数据。
明确地说,我想将用户的输入(来自 HTML 表单)传递到生成列表的 python 函数,然后将该列表传递回 HTML 并将其显示在网页上。
例如:
@app.route("/tool2", methods=['GET', 'POST'])
def tool2():
form = ToolForm()
def mainfunc(var1):
#Code related to souping
newdata = []
for i in list(range(2)):
maindata = [inte.text for inte in soup.find('div', {'id':'main-content'}).find_all('a', {'class': 'main-info'})]
if var1 == 'x':
for i2 in maindata:
rda = i2
newdata.append(rda)
elif var1 == 'y':
for i3 in maindata:
rda = "-" + i3 + "-"
newdata.append(rda)
elif var1 == 'z':
for i4 in maindata:
rda = '+' + i4 + '+'
newdata.append(rda)
else:
redirect(url_for('tool3')) # <-- This is not working either, if someone wants to be generous and enlighten me on that as well.
print(newdata)
testpagecount += 1
if form.validate_on_submit():
mainfunc(form.tester.data)
return render_template('tool2.html', title='Tool-Active', form=form)
我想通过html在网页上打印newdata
,但是如果我尝试调用它,什么也没有发生(它不打印,我也没有收到任何错误).
我的 HTML 代码是(无论我尝试在 html 中的什么地方打印 newdata
,它都不会打印):
{% extends "layout.html" %}
{% block content %}
<div class="content-section">
<form method="POST" action="">
{{ form.hidden_tag() }}
<fieldset class="form-group">
<legend>Tester</legend>
<div class="form-group">
{{ form.var1.label(class="form-control-label") }}
{% if form.var1.errors %}
{{ form.var1(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for errors in form.var1.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.var1(class="form-control form-control-lg") }}
{% endif %}
</div>
</fieldset>
<div class="form-group">
{{ form.submittool(class="btn btn-outline-info") }}
</div>
</form>
</div>
<div class="border-top pt-3">
<small class="text-muted">
Learn More <a class="ml-2" href="{{ url_for('about') }}">About</a>
</small>
</div>
<div class="media-body">
<div class="article-metadata">
<a class="mr-2" href="#">{{ newdata }}</a>
<small class="text-muted">{{ newdata }}</small>
</div>
<p> {{ newdata }} </p>
</div>
{% endblock content %}
我的问题是,如何将变量从 Python 函数传递给 HTML,并使其显示在网页上?
假设您已成功填充 newlist
,然后在 mainfunc
中,您可以 return 以下内容:
return render_template('tool2.html', title='Tool-Active', form=form, mynewlist=newlist)
然后,在您的 tool2.html
视图中,您可以按如下方式遍历此 returned 列表:
<ul>{% for item in mynewlist %}
<li>item</li>
{% endfor %}
</ul>
看来 Flask 不喜欢嵌套函数。我通过删除条件下的函数调用并将函数代码放在条件下来实现它,例如:
if form.validate_on_submit():
newdata = []
for i in list(range(2)):
maindata = [inte.text for inte in soup.find('div', {'id':'main-content'}).find_all('a', {'class': 'main-info'})]
if var1 == 'x':
for i2 in maindata:
rda = i2
newdata.append(rda)
elif var1 == 'y':
for i3 in maindata:
rda = "-" + i3 + "-"
newdata.append(rda)
elif var1 == 'z':
for i4 in maindata:
rda = '+' + i4 + '+'
newdata.append(rda)
else:
redirect(url_for('tool3')) # <-- This is not working either, if someone wants to be generous and enlighten me on that as well.
print(newdata)
testpagecount += 1
我正在使用 Flask 和所有相关框架和库(Jinja、WTForms 等...)构建一个 Web 应用程序。这是我第一次使用 Flask 并构建一个合适的 Web 应用程序。我无法弄清楚如何访问应用程序目录文件中不同函数的数据。
明确地说,我想将用户的输入(来自 HTML 表单)传递到生成列表的 python 函数,然后将该列表传递回 HTML 并将其显示在网页上。
例如:
@app.route("/tool2", methods=['GET', 'POST'])
def tool2():
form = ToolForm()
def mainfunc(var1):
#Code related to souping
newdata = []
for i in list(range(2)):
maindata = [inte.text for inte in soup.find('div', {'id':'main-content'}).find_all('a', {'class': 'main-info'})]
if var1 == 'x':
for i2 in maindata:
rda = i2
newdata.append(rda)
elif var1 == 'y':
for i3 in maindata:
rda = "-" + i3 + "-"
newdata.append(rda)
elif var1 == 'z':
for i4 in maindata:
rda = '+' + i4 + '+'
newdata.append(rda)
else:
redirect(url_for('tool3')) # <-- This is not working either, if someone wants to be generous and enlighten me on that as well.
print(newdata)
testpagecount += 1
if form.validate_on_submit():
mainfunc(form.tester.data)
return render_template('tool2.html', title='Tool-Active', form=form)
我想通过html在网页上打印newdata
,但是如果我尝试调用它,什么也没有发生(它不打印,我也没有收到任何错误).
我的 HTML 代码是(无论我尝试在 html 中的什么地方打印 newdata
,它都不会打印):
{% extends "layout.html" %}
{% block content %}
<div class="content-section">
<form method="POST" action="">
{{ form.hidden_tag() }}
<fieldset class="form-group">
<legend>Tester</legend>
<div class="form-group">
{{ form.var1.label(class="form-control-label") }}
{% if form.var1.errors %}
{{ form.var1(class="form-control form-control-lg is-invalid") }}
<div class="invalid-feedback">
{% for errors in form.var1.errors %}
<span>{{ error }}</span>
{% endfor %}
</div>
{% else %}
{{ form.var1(class="form-control form-control-lg") }}
{% endif %}
</div>
</fieldset>
<div class="form-group">
{{ form.submittool(class="btn btn-outline-info") }}
</div>
</form>
</div>
<div class="border-top pt-3">
<small class="text-muted">
Learn More <a class="ml-2" href="{{ url_for('about') }}">About</a>
</small>
</div>
<div class="media-body">
<div class="article-metadata">
<a class="mr-2" href="#">{{ newdata }}</a>
<small class="text-muted">{{ newdata }}</small>
</div>
<p> {{ newdata }} </p>
</div>
{% endblock content %}
我的问题是,如何将变量从 Python 函数传递给 HTML,并使其显示在网页上?
假设您已成功填充 newlist
,然后在 mainfunc
中,您可以 return 以下内容:
return render_template('tool2.html', title='Tool-Active', form=form, mynewlist=newlist)
然后,在您的 tool2.html
视图中,您可以按如下方式遍历此 returned 列表:
<ul>{% for item in mynewlist %}
<li>item</li>
{% endfor %}
</ul>
看来 Flask 不喜欢嵌套函数。我通过删除条件下的函数调用并将函数代码放在条件下来实现它,例如:
if form.validate_on_submit():
newdata = []
for i in list(range(2)):
maindata = [inte.text for inte in soup.find('div', {'id':'main-content'}).find_all('a', {'class': 'main-info'})]
if var1 == 'x':
for i2 in maindata:
rda = i2
newdata.append(rda)
elif var1 == 'y':
for i3 in maindata:
rda = "-" + i3 + "-"
newdata.append(rda)
elif var1 == 'z':
for i4 in maindata:
rda = '+' + i4 + '+'
newdata.append(rda)
else:
redirect(url_for('tool3')) # <-- This is not working either, if someone wants to be generous and enlighten me on that as well.
print(newdata)
testpagecount += 1