2017-04-06 164 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

你的重定向工作正常。新实体没有出现的原因是因为GAE数据存储的eventual consistency。放置实体时,可能需要一些时间才能查询。

有解决方法,但它们取决于特定的应用程序。例如,您可以存储密钥列表,因为通过密钥获取将始终有效,或者您可以使用memcache。