使用 Google App Engine 的 Django 模板从实体列表中访问具有特定 ReferenceProperty 值的实体
Posted
技术标签:
【中文标题】使用 Google App Engine 的 Django 模板从实体列表中访问具有特定 ReferenceProperty 值的实体【英文标题】:Using Django templates for Google App Engine to access an entity with specific ReferenceProperty value from a list of entities 【发布时间】:2012-01-05 07:30:24 【问题描述】:我一直在努力解决 Google App Engine 和 Django 中的问题,但无法找到解决方案 (despitefindingsimilarproblems)。
让我稍微设置一下场景。我有以下三个实体:
Contributor:
user = db.UserProperty()
Question:
contributor = db.ReferenceProperty(Contributor, collection_name='questions')
text = db.TextProperty()
Rating:
contributor = db.ReferenceProperty(Contributor, collection_name='question_ratings')
question = db.ReferenceProperty(Question, collection_name='ratings')
rating = db.IntegerProperty(choices=set([1,2,3,4,5]))
在我的 Django 模板(如下)中,我的一般要求是显示 (1) 每个问题,(2) 问题的贡献者,以及 (3) 问题是否已被当前用户评分。
我的问题在于第三个要求。我无法弄清楚如何确定Question
是否具有与当前@ 关联的Contributor
的Rating
987654329@(即Contributor
和用户属性users.get_current_user()
)。我怎么能做到这一点?
如果存在这样的Rating
实体,则会显示类似于“您已对该问题进行评分”的消息。否则,如果不存在这样的Rating
,则会显示对问题进行评分的选项。这是我针对前两个要求的 Django 模板(以及概述第三个要求的注释)。
% for question in questions %
<h1> question.text </h1>
<h2> question.contributor.user.nickname() </h2>
% comment %
if no Rating exists for Question and Contributor:
<h3>Rating: 1 2 3 4 5</h3>
else:
<h3>You have already rated this question.</h3>
% endcomment %
% endfor %
这是 Google App Engine 的 Python 处理程序脚本:
questions = Question.all()
ratings = Rating.all()
ratings.filter('contributor = ', profile)
template_values =
'contributor': contributor,
'questions': questions
path = os.path.join(os.path.dirname(__file__), "questions.html")
rendered_text = template.render(path, template_values)
self.response.out.write(rendered_text)
【问题讨论】:
【参考方案1】:最好的方法是在 Python 代码中进行处理,并将仅包含相关信息的 dicts 列表传递给 Django 模板。这也意味着您可以利用 reference property prefetching 之类的技巧来最大程度地减少您必须执行的 RPC 数量。
【讨论】:
谢谢。我曾考虑过使用这种方法,但我认为可能有更好的方法。这真的是最好的方法吗?您能否推荐一些资源来进一步解释这一点? @mokogobo 是的,这是最好的方法——你通常应该避免在你的模板代码中处理,尤其是任何导致 RPC 的东西。 Django 模板的明确结构使这变得困难,以阻止您这样做。我不知道有任何资源可以处理这个特定问题。以上是关于使用 Google App Engine 的 Django 模板从实体列表中访问具有特定 ReferenceProperty 值的实体的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google App Engine 签名的 Google Cloud Storage 网址
是否可以将 Google App Engine 与 Google Cloud *** 一起使用?
Google App Engine 通过内部网络与 Compute Engine 通信