我有一个非常简单的烧瓶形式设置,有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:'表格'未定义
答案 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
添加回所有表单。