user_key プロパティを持つ Comment オブジェクトがあり、Comment オブジェクトを Flask テンプレートに渡していますが、各コメントの横に User.username プロパティを表示したいのですが、テンプレートにいるときは、ユーザー・キー。テンプレートに入ったら、ユーザー キーに基づいてユーザー オブジェクトにアクセスするにはどうすればよいですか?
私のモデルクラスは次のようになります。
class Base(ndb.Model, modelx.BaseX):
created = ndb.DateTimeProperty(auto_now_add=True)
modified = ndb.DateTimeProperty(auto_now=True)
version = ndb.IntegerProperty(default=TIMESTAMP)
_PROPERTIES = set([
'key',
'id',
'version',
'created',
'modified',
])
class Comment(Base):
user_key = ndb.KeyProperty(kind=User, required=True)
comment = ndb.StringProperty(required=True)
like_count = ndb.IntegerProperty(required=False, default=0)
class User(Base, modelx.UserX):
name = ndb.StringProperty(indexed=True, required=True)
username = ndb.StringProperty(indexed=True, required=True)
email = ndb.StringProperty(indexed=True, default='')
active = ndb.BooleanProperty(default=True)
admin = ndb.BooleanProperty(default=False)
federated_id = ndb.StringProperty(indexed=True, default='')
facebook_id = ndb.StringProperty(indexed=True, default='')
twitter_id = ndb.StringProperty(indexed=True, default='')
_PROPERTIES = Base._PROPERTIES.union(set([
'name',
'username',
'avatar_url',
]))
次に、次のようにテンプレートをレンダリングします。
query = model.Comment.query()
comment_dbs = query.fetch()
return flask.render_template(
'filename.html',
html_class='classname',
title='Title here',
comment_dbs=comment_dbs
)
そして最後に、テンプレート ファイルで、ユーザー オブジェクトのユーザー名やアバター プロパティなどにアクセスしたい場所です: (このコードは、必要な場所にユーザー キーを出力するだけです。 User.username を入力します。
# if comment_dbs
{% for c in comment_dbs %}
{{c.user_key}}{{c.comment}}<br>
{% endfor %}
# endif
Python では key.get() を実行して必要なオブジェクトを返すことができることは知っていますが、テンプレートでこれを行う方法はありますか?
Comment オブジェクトをループして、各キーに基づいて User オブジェクトを検索し、その User オブジェクトの配列をテンプレートに渡す必要がありますか? ちょっと厄介なようで、おそらくもっと良い方法があるようです...