2

Google App Engine で次のコードを使用するとエラーが発生することを理解できません。モデル オブジェクトのすべての要素を一覧表示したいと考えています。コードを実行すると、次のエラーが発生します。このエラーが発生する理由を誰かに説明してもらえますか?

エラー:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2\webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "C:\Users\evalentini\Desktop\Personal\Udacity Web Development Class\logintest\main.py", line 143, in get
    self.render("userlist.html", users=users)
  File "C:\Users\evalentini\Desktop\Personal\Udacity Web Development Class\logintest\main.py", line 73, in render
    self.write(render_str(template, **kw))
  File "C:\Users\evalentini\Desktop\Personal\Udacity Web Development Class\logintest\main.py", line 32, in render_str
    return t.render(params)
  File "C:\Program Files (x86)\Google\google_appengine\lib\jinja2\jinja2\environment.py", line 894, in render
    return self.environment.handle_exception(exc_info, True)
  File "C:\Users\evalentini\Desktop\Personal\Udacity Web Development Class\logintest\templates\userlist.html", line 3, in top-level template code
    {% for user in users: %}
TypeError: 'User' object is not iterable

名前を一覧表示する requestHandler オブジェクト (ListNames) を作成しました (以下のコード)。

クラス ListNames(BlogHandler):

def get(self):
    users=User.all().get()
    self.render("userlist.html", users=users)

これは私の User モデルを使用します:

class User(db.Model):
    name=db.StringProperty(required=True)
    pwd=db.StringProperty(required=True)
    email=db.StringProperty(required=True)

そして、jinja テンプレートからページをレンダリングするための render と呼ばれる関数:

def render_str(template, **params):<br>
    t=jinja_env.get_template(template)
    <br>return t.render(params)

以下のジンジャテンプレート:

<html>

{% for user in users: %}
    <div style="{border: 1px solid; border-color: blue; padding: 1px;}">
        {{user.name}}
    </div>
{% endfor %}
</html>
4

1 に答える 1

4

取得しているユーザーは1人だけです

users=User.all().get()

これは最初のエンティティを返します

ユーザーのリストを返すfetch()を使用する必要があります

users=User.all().fetch(1000)

または、次のようなクエリを渡します。

users=User.all()

この最後のオプションは、多くのユーザーを返す可能性があり、アプリのパフォーマンスに影響を与えたり、さらに悪化させたりする可能性があるため、最善のオプションではありません。

于 2012-06-07T00:44:09.823 に答える