0

這是我tips.html模板的片段,包括在index.htmldb.Model.all()返回一個空列表

{% 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.htmltips

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

你能告訴我們models.py和views.py嗎? –

+0

@JoãoVilaça當然,我編輯帖子 –

+0

模型似乎是正確的,你可以添加view.py嗎?看看它是否是一個上下文問題 –

回答

2

你好像是的Eventual Consistency受害者:

一致性在GAE的背景下數據存儲,並在非常s非技術性術語是「最新數據副本的可用性」。也許更直觀(但公然不正確)的定義是'寫和讀之間缺乏延遲'。強一致意味着最小或無滯後,其中寫入的數據可立即用於後續讀取。最終一致意味着存在相當大的滯後,其中寫入的數據在被傳播並存儲在多個數據中心後將被「最終」讀取。

因此,發生的事情是,在寫入完成後,但在傳播之前,您將回到提示列表,因此數據不在索引當時。如果您在重定向之前等待幾秒鐘,或者像您一樣刷新,那麼數據將會在那裏。

這是正常的,你會習慣的。但是,如果您使用ancestor query,則數據存儲可以保證強烈一致的查詢。如果您剛接觸此主題,則可能會對此文章感興趣:Balancing Strong and Eventual Consistency with Google Cloud Datastore