【问题标题】:Google App Engine + Jinja2: Using self.redirect() with paramsGoogle App Engine + Jinja2:使用带参数的 self.redirect()
【发布时间】:2014-01-20 07:33:29
【问题描述】:

假设我有一个Book ndb.Model class.

class Book(ndb.Model):
    title = ndb.StringProperty(required = True)

Book 实体由该处理程序创建:

     def get(self):
         self.render('new-book.html')

     def post(self):
          title = self.request.get('title')

         if title:
            b = Book(title = title)
            b.put()
            self.redirect('/book/%s' % str(b.key.id()))

创建 Book 实体后,我们将被重定向到 /book/[book id]。在此页面上,我想包含一条消息,上面写着“干得好!您已经创建了 [书名]。”我该怎么做?

【问题讨论】:

  • 你在用 django 吗?
  • 糟糕,我正在使用 Jinja2。

标签: google-app-engine python-2.7 jinja2 app-engine-ndb webapp2


【解决方案1】:

为什么不在 url 中包含您的消息,然后使用 javascript 将其放置在您想要的位置?

self.redirect('/book/%s?message=%s' % (str(b.key.id()), "Good job! You've created " + title)

为 js 做这样的事情......

alert(document.location.substring(document.location.indexOf("?message=")+9, document.location.length));

希望这会有所帮助!

【讨论】:

  • 谢谢你,安德鲁。这似乎是一个简单、有效的解决方案(即使没有 Javascript 部分;我可以使用 self.request.get('message'))。我们在这里遇到的一个问题是我们被重定向到路径,例如/book/[book id]?message=message,如果共享此链接,其他访问者也会出现同样的消息。我们不希望那样。知道如何通过这个吗?
  • 您存储的是创建图书的用户吗?如果是这样,您可以说 if(BookCreator == CurrentUser): Jinja2message = self.request.get('message')
【解决方案2】:

我只是简单地这样做

main.py 或您在应用中使用的任何其他内容,例如:

app = webapp2.WSGIApplication([

    ('/book/([^/]+)?', server.BookHandler)

], debug=True)

Handlers 类似:

def get(self):
    self.render('new-book.html')

def post(self):
    title = self.request.get('title')

    if title:
        b = Book(title = title)
        b.put()
        self.redirect('/book/%s/' % str(b.key.id()), abort=True)

#...more stuff

#on handler for book
def get(self, message):
    #use message

    self.response.out.write(message)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多