【问题标题】:redirect not working, have to refresh page every time重定向不起作用,每次都必须刷新页面
【发布时间】:2017-08-31 19:48:15
【问题描述】:

每次点击提交时,我都会尝试在 post 方法中重定向(这会向数据库添加更多“艺术”),但之后我必须刷新才能显示新条目。我已经包含了我的 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>

【问题讨论】:

    标签: python html google-app-engine jinja2


    【解决方案1】:

    您的重定向工作正常。新实体未显示的原因是 eventual consistency 带有 GAE 数据存储。当您放置一个实体时,可能需要一些时间才能对其进行查询。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 2017-01-06
      • 2012-07-07
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      相关资源
      最近更新 更多