这是我tips.html
模板的一个片段,包含在index.html
中:
{% for t in tips %}
<div class="col-lg-4 col-sm-6">
<form action="comment.html" method="get" class="portfolio-box">
<img src="img/portfolio/4.jpg" class="img-responsive" alt="">
<div class="portfolio-box-caption">
<div class="portfolio-box-caption-content">
<div class="project-category text-faded">
{{ t.title }}
</div>
<div class="project-name">
{{ t.content }}
</div>
<div><br /></div>
{% if user != 'None' %}
<input type="hidden" name="tipTitle" value="{{ t.title }}">
<input type="hidden" name="tipContent" value="{{ t.content }}">
<input type="hidden" name="hparam" value="tips">
<div><button class="btn btn-default btn-l wow tada">Explore</button></div>
{% endif %}
</div>
</div>
</form>
</div>
{% endfor %}
此html块应显示数据存储区中可用的提示。但是,在我将第一个提示添加到数据库后,我将响应从addtip.html
重定向到index.html
我只得到一个带有图片的div但是没有{{ t.title }}
或{{ t.content }}
我刷新页面。
我将Tip.all()
传递给index.html
tips
。
models.py
from google.appengine.ext import db
class User(db.Model):
fullName = db.StringProperty()
username = db.StringProperty()
email = db.StringProperty()
password = db.StringProperty()
def getKey(self):
return self.key()
class Tip(db.Model):
title = db.StringProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
img = db.BlobProperty()
user = db.ReferenceProperty(User, collection_name='tips')
def getKey(self):
return self.key()
class Comment(db.Model):
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
user = db.ReferenceProperty(User, collection_name='comments')
tip = db.ReferenceProperty(Tip, collection_name='comments')
我的处理程序
class MainPage(BaseHandler):
def get(self):
template = JINJA_ENVIRONMENT.get_template('index.html')
query = Tip.all()
context = {
'title' :'OutgoingIndex - ' + currentUser.username,
'user' : currentUser.username,
'tips' : query
}
self.response.write(template.render(context))
答案 0 :(得分:2)
看起来你是Eventual Consistency的受害者:
GAE数据存储环境的一致性,以及非常简单的非技术性术语,是“最新数据副本的可用性”。也许更直观(但公然不正确)的定义是“写入与读取之间缺乏延迟”。强烈一致意味着最小到无滞后,其中书面数据可立即用于后续读取。最终的一致意味着存在相当大的滞后,在将数据传播并存储在多个数据中心之后,写入数据将“最终”可用于读取。
所以会发生的事情是,在写入完成之后,但在传播之前,您将返回到提示列表,因此此时数据不在索引中。如果您在重定向之前等待几秒钟,或者像您一样刷新,那么数据就会在那里。
这是正常的,你会习惯的东西。但是,如果使用ancestor query,数据存储区可以保证一致的查询。如果您是这个主题的新手,那么本文可能很有趣:Balancing Strong and Eventual Consistency with Google Cloud Datastore。