Flask TypeError:“_RequestGlobals”类型的参数不可迭代

问题描述

TL;DR

在这个网站上工作:sendsomething.net

我的 Flask 项目出现以下错误

Traceback (most recent call last):
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask/app.py",line 1518,in __call__
    return self.wsgi_app(environ,start_response)
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask/app.py",line 1506,in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask/app.py",line 1504,in wsgi_app
    response = self.full_dispatch_request()
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask/app.py",line 1264,in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask/app.py",line 1262,in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask/app.py",line 1248,in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/leilers/sendsomething/sendsomething_flask/sendsomething/views.py",line 62,in hello
    return render_template('hello.html')
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask/templating.py",line 121,in render_template
    ctx.app.update_template_context(context)
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask/app.py",line 661,in update_template_context
    context.update(func())
  File "/home/leilers/sendsomething/sendsomething_flask/sendsomething/views.py",line 54,in inject_login_form
    g.login_form = LoginForm()
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/wtforms/form.py",line 208,in __call__
    return type.__call__(cls,*args,**kwargs)
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask_wtf/form.py",line 87,in __init__
    super(FlaskForm,self).__init__(formdata=formdata,**kwargs)
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/wtforms/form.py",line 274,in __init__
    self.process(formdata,obj,data=data,line 131,in process
    field.process(formdata)
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/wtforms/csrf/core.py",line 43,in process
    self.current_token = self.csrf_impl.generate_csrf_token(self)
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask_wtf/csrf.py",line 134,in generate_csrf_token
    token_key=self.Meta.csrf_field_name
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/flask_wtf/csrf.py",line 42,in generate_csrf
    if field_name not in g:
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/werkzeug/local.py",line 365,in <lambda>
    __contains__ = lambda x,i: i in x._get_current_object()
TypeError: argument of type '_RequestGlobals' is not iterable

更深入

我没有网页设计经验,所以我很难过(并且已经好几天了)。如果以上内容是您帮助我解决问题所需的全部内容,那就太棒了。如果您需要更多详细信息,请点击此处:

我的 Flask 项目的 <root>/sendsomething/views.py 的相关部分

#...
@app.route("/")
def hello():
    return render_template('index.html')
#...

文件 <root>/sendsomething/templates/index.html 确实存在。它的内容并不重要,因为更改内容不会对错误产生影响。您实际上可以通过访问 sendsomething.net 来查看输出

我已阅读并尝试解决此相关问题 Flask argument of type '_RequestGlobals' is not iterable,这似乎是其他人遇到此问题的唯一实例。

我在我的 virtualenv 中,运行 python 2.7.16。我已经运行了 pip install Werkzeug --update(虽然我的 requirements.txt 指定它应该使用 Werkzeug 0.8.2)。我已确保 which python 指向正确的位置。

如果您需要更多信息,请告诉我。感谢您的帮助!

解决方法

这只是我对它的第一眼,所以如果它不是一个有用的回答,我深表歉意。您的代码看起来像这样:

59  @app.route("/")
60  def hello():
61      #return render_template('index.html')
62      return render_template('hello.html')

你说 index.html 存在...看起来 index.html 的返回被注释掉了,它仍然试图转到 hello.html

所以应该如下,正如您在问题中所描述的:

@app.route("/")
def hello():
    return render_template('index.html')