首页 > 解决方案 > Flask TypeError:“_RequestGlobals”类型的参数不可迭代

问题描述

TL;博士

我正在这个网站上工作: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, **kwargs)
  File "/home/leilers/sendsomething/env/lib/python2.7/site-packages/wtforms/form.py", 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查看输出。

我已阅读并尝试解决此相关问题,类型为 '_RequestGlobals' 的 Flask 参数不可迭代,这似乎是遇到此问题的唯一其他实例。

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

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

标签: pythonpython-2.7flaskwerkzeug

解决方案


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

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

你说 index.html 存在......看起来 return forindex.html被注释掉了,它仍然试图去hello.html.

因此,正如您在问题中描述的那样,它应该是以下内容:

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

推荐阅读