2017-04-06 8 views
2

私は投稿メソッドをリダイレクトするたびにリダイレクトを試みますが(データベースに "アート"が追加されます)、後で新しいエントリを取得する必要があります代わりに表示されます。 main.pyコードとhtmlを以下に含めました。どのように私はこれを修正することができますので、毎回手動で更新する必要はありません。 (これはudacityウェブ開発コースからのものです)。リダイレクトが機能しない毎回ページを更新する必要があります

import os 
import webapp2 
import jinja2 

from google.appengine.ext import db 

template_dir = os.path.join(os.path.dirname(__file__), 'templates') 
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), 
           autoescape = True) 

class Handler(webapp2.RequestHandler): 
    def write(self, *a, **kw): 
     self.response.out.write(*a, **kw) 

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

    def render(self, template, **kw): 
     self.write(self.render_str(template, **kw)) 

class Art(db.Model): 
    title = db.StringProperty(required = True) 
    art = db.TextProperty(required = True) 
    created = db.DateTimeProperty(auto_now_add = True) 

class MainPage(Handler): 
    def render_front(self, title="", art="", error=""): 
     arts = db.GqlQuery("select * from Art order by created desc") 
     self.render("front.html", title = title, art = art, error = error, arts = arts) 

    def get(self): 
     self.render_front() 

    def post(self): 
     title = self.request.get("title") 
     art = self.request.get("art") 

     if title and art: 
      a = Art(title=title, art=art) 
      a.put() 
      self.redirect("/") 

     else: 
      error = "we need both a title and some artwork!" 
      self.render_front(error=error, title=title,art=art) 


app = webapp2.WSGIApplication([ 
    ('/', MainPage), 
], debug=True) 

HTML:

<form method="post"> 
    <label> 
     <div>title</div> 
     <input type="text" name="title" value="{{title}}"> 
    </label> 

    <label> 
     <div>art</div> 
     <textarea name="art">{{art}}</textarea> 
    <label> 

    <div class="error">{{error}}</div> 

    <input type="submit"> 
    </form> 

    <hr> 

    {% for art in arts %} 
    <div class="art"> 
     <div class="art-title">{{art.title}}</div> 
     <pre class="art-body">{{art.art}}</pre> 
    </div> 
    {% endfor %} 

</body> 

答えて

2

あなたのリダイレクトが正常に動作しています。新しいエンティティが表示されない理由は、eventual consistencyのGAEデータストアが原因です。エンティティを配置すると、照会できるようになるまでに少し時間がかかることがあります。

回避方法がありますが、特定のアプリケーションによって異なります。たとえば、キーで取得すると常に機能するか、memcacheを使用できるので、キーのリストを保存できます。

関連する問題