将python列表传递到烧瓶视图不起作用

时间:2018-01-09 23:17:20

标签: python flask jinja2

我有一个非常简单的烧瓶形式设置,有1个字段。此字段通过POST请求传递给运行的脚本,并将render_template返回到结果页面,从脚本传递4个列表对象。

我可以在python解释器中运行脚本并打印列表的值。但是,似乎并没有将列表传递回视图。我一直收到表单未定义的错误。我认为它只是跳过索引路由中的返回函数而不是从函数返回视图。在发送到视图之前,我是否需要对列表变量执行某些操作?

路线

@app.route('/', methods=['GET', 'POST'])
def index():
    form = Search()
    if form.validate_on_submit():
        name=request.form['name']
        smoothSearch(name)
    return render_template("index.html", form=form)

功能

#function runs a for loop appending items to each list item then returns a render_template shown below
else:
    return render_template("results.html", usernames=usernames, userHandle=userHandle, userText=userText, postTime=postTime)

编辑以包含下面的jinja2引用

  

jinja2.exceptions.UndefinedError   jinja2.exceptions.UndefinedError:' form'未定义

     

追踪(最近一次通话)   文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/app.py" ;, 1997年,致电   return self.wsgi_app(environ,start_response)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/app.py" ;,第1985行,在wsgi_app中   response = self.handle_exception(e)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/app.py",第1540行,在handle_exception中   重新加注(exc_type,exc_value,tb)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/_compat.py" ;,第33行,重新加入   提高价值

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/app.py" ;,第1982行,在wsgi_app中   response = self.full_dispatch_request()

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/app.py",第1614行,在full_dispatch_request中   rv = self.handle_user_exception(e)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/app.py" ;,第1517行,在handle_user_exception中   重新加注(exc_type,exc_value,tb)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/_compat.py" ;,第33行,重新加入   提高价值

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/app.py",第1612行,在full_dispatch_request中   rv = self.dispatch_request()

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/app.py",第1598行,在dispatch_request中   return self.view_functionsrule.endpoint

     

文件" /home/user/temp/code-projects/smoothSearch/app.py",第22行,索引   smoothSearch(名称)

     

文件" /home/user/temp/code-projects/smoothSearch/smoothSearch.py​​",第31行,在smoothSearch中   return render_template(' results.html',usernames = usernames,userHandle = userHandle,userText = userText,postTime = postTime)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/templating.py",第134行,在render_template中   context,ctx.app)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/flask/templating.py" ;,第116行,在_render中   rv = template.render(context)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/jinja2/environment.py" ;,第1008行,在渲染中   return self.environment.handle_exception(exc_info,True)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/jinja2/environment.py",第780行,在handle_exception中   重新加注(exc_type,exc_value,tb)

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/jinja2/_compat.py" ;,第37行,重新加入   提高value.with_traceback(tb)

     

文件" /home/user/temp/code-projects/smoothSearch/templates/results.html",第1行,在顶级模板代码中   {%extends" index.html" %}

     

文件" /home/user/temp/code-projects/smoothSearch/templates/index.html",第17行,位于顶级模板代码中   {{form.csrf_token}}

     

文件" /home/user/temp/code-projects/smoothSearch/lib/python3.5/site-packages/jinja2/environment.py" ;,第430行,在getattr中   return getattr(obj,attribute)

     

jinja2.exceptions.UndefinedError:'表格'未定义

1 个答案:

答案 0 :(得分:2)

假设您的函数smoothSearch(...)的结尾,您需要在函数调用前面使用return语句。

@app.route('/', methods=['GET', 'POST'])
def index():
    form = Search()
    if form.validate_on_submit():
        name=request.form['name']
        return smoothSearch(name)
    return render_template("index.html", form=form)

问题更新后修改:

通过追溯,您可以看到index.html的第17行有form.csrf_token的电话。由于您没有将form传递给模板,因此会抛出错误。从index.html删除它将解决此错误,但它很可能会破坏您的任何形式。您必须将form.csrf_token添加回所有表单。