Python Flask-将列表传递给新视图

Python Flask-将列表传递给新视图,python,html,flask,web-applications,flask-wtforms,Python,Html,Flask,Web Applications,Flask Wtforms,我正在用Flask和所有相关框架和库(Jinja、WTForms等)构建一个web应用程序。这是我第一次使用Flask并构建适当的web应用程序。我很难弄清楚如何访问应用程序目录文件中不同函数中的数据 为了清楚起见,我想将用户的输入(来自HTML表单)传递到一个python函数中,该函数生成一个列表,然后将该列表传递回HTML并显示在网页上 例如: @app.route("/tool2", methods=['GET', 'POST']) def tool2(): form = ToolForm

我正在用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)

我的问题是,如何将一个变量从Python函数传递到HTML,并将其显示在网页上

假设您已成功填充了
新列表
,那么在
mainfunc
中,您可以返回以下内容:

return render_模板('tool2.html',title='Tool-Active',form=form,mynewlist=newlist)

然后,在
tool2.html
视图中,您可以按如下方式迭代此返回列表:

<ul>{% for item in mynewlist %}
  <li>item</li>
  {% endfor %}
</ul>
    {%for mynewlist%中的项]
  • 项目
  • {%endfor%}

所以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
if form.validate\u on\u submit():
newdata=[]
对于列表中的i(范围(2)):
maindata=[soup.find('div',{'id':'main-content'})中inte的inte.text。find_all('a',{'class':'main-info'})]
如果var1=='x':
对于主数据中的i2:
rda=i2
newdata.append(rda)
elif var1==“y”:
对于maindata中的i3:
rda=“-”+i3+”-“
newdata.append(rda)
elif var1=='z':
对于主数据中的i4:
rda='+'+i4+'+'
newdata.append(rda)
其他:

重定向(url_for('tool3'))#通过mynewlist您是指我拥有的变量'newdata'吗?我试过了,但它似乎不起作用。记住,您正在返回变量并呈现
tool2.html
,因此它应该在
.html
文件中可用,因此您应该在返回的html文件中迭代/循环您的列表;这里有一个类似的问题:[我没有收到错误,当我开始键入它时,它似乎会自动填充列表作为一个参数(因此它会找到它),它似乎不会显示在页面上。我是否需要删除我的其他“render_模板”?非常感谢您的帮助,HTML现在会自动完成我传递给return_模板参数的变量(因此我将向您投票)。因此我假设它成功地传递了这些变量,我还知道列表正在通过print()成功填充奇怪的是,尽管在我的命令提示符下,打印结果会出现在HTML页面中,它们仍然不会显示在网页上。你考虑过没有合并POST并进入相同的函数吗?做出两个视图,一个将从用户那里得到输入并放入一个列表,另一个视图将在列表中显示并显示在ANO中。例如,当用户单击某个按钮时,使用html。在更简单的版本中重构视图可能会帮助您更轻松地调试。希望这能有所帮助。
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