Google app engine 如何在webapp2中重定向

Google app engine 如何在webapp2中重定向,google-app-engine,python-2.7,webapp2,Google App Engine,Python 2.7,Webapp2,你好,我正在学习webapp2,我怀疑有三个页面 1:/blog,用于查看链接到永久链接的所有发布的博客 2:/blog/newpost用于获取blog的newpost,它只包含标题和blog作为输入,而用户单击submit按钮它将重定向到一些永久链接此作品!!! 3:最后一个是/blog/somepermalink,其中用户在步骤2中被重定向到此页面 我的问题是第一页给出了所有创建的博客列表,当用户点击某个博客时,我想重定向到第3步,但不幸的是,它给了我404错误 这是我的密码 class H

你好,我正在学习webapp2,我怀疑有三个页面 1:/blog,用于查看链接到永久链接的所有发布的博客 2:/blog/newpost用于获取blog的newpost,它只包含标题和blog作为输入,而用户单击submit按钮它将重定向到一些永久链接此作品!!! 3:最后一个是/blog/somepermalink,其中用户在步骤2中被重定向到此页面

我的问题是第一页给出了所有创建的博客列表,当用户点击某个博客时,我想重定向到第3步,但不幸的是,它给了我404错误 这是我的密码

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 Blog(db.Model):
   title = db.StringProperty(required = True)
   blog = db.TextProperty(required = True)
   created = db.DateTimeProperty(auto_now_add = True) 


 class MainPage(Handler):
   def render_front(self, title="", blog="", error=""):
     self.render("newpost.html", title=title, blog=blog, error=error)

   def get(self):
     self.render_front()

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

     if title and blog:
       a = Blog(title=title, blog=blog)
       a_key = a.put()
     #sleep is used because of replication lag time
       sleep(0.1)   
     #redirect to some permalink
       self.redirect("/blog/%d" % a_key.id())
    else:
      error = "both title and post are needed"
      self.render_front(title, blog, error)  


class BlogPostHandler(Handler):
   def render_blog(self, title="", blogs=""):
     blogs = db.GqlQuery("SELECT * FROM Blog ORDER BY created DESC")
     self.render("blogpage.html", title=title, blogs=blogs)

  def get(self):
    self.render_blog()

class PermaLink(MainPage):
  def get(self, blog_id):
    s = Blog.get_by_id(int(blog_id))
    self.render("blogpage.html", blogs = [s])


app = webapp2.WSGIApplication([('/blog',BlogPostHandler),
                           ('/blog/newpost',MainPage),
                           ('/blog/(\d+)', PermaLink)], 

您提供的代码中没有任何明显的地方表明存在bug。由于MainPage请求处理程序中的重定向确实正确地重定向和加载博客文章,我怀疑问题在于如何在BlogPostHandler使用的jinja2模板中创建链接。以下是一些需要注意的事项:

这些链接使用/blog/而不是/blogs/复数形式。 链接中的意外空白:/blog/1234。 您使用的是绝对链接而不是相对链接。 绝对值:href=/blog/{{post.id}}/ 相对:href=blog/{{post.id}}no leading/,它将链接到/blog/blog/ 博客帖子ID被呈现为一个整数而不是一个长字符,这在使用Google App Engine的数据存储时可能会发生。 整数:/blog/1234 长:/blog/1234L
也许值得一提的是,在第一个答复中增加了以下内容:在选择以下服务时,您可以享受更多的灵活性:


上面的最后一行表示到/blog/的路径,与初始代码的方式相同。如果要在/blog/之后指示任何可能的路径,则应使用路由r'/blog/'

显示带有博客链接或表单的html。关于睡眠。索引一致性还有其他方法:下面的答案对您有帮助吗?
app = webapp2.WSGIApplication([
    webapp2.Route(r'/blog', handler=BlogPostHandler, name='BlogPost'),
    webapp2.Route(r'/blog/newpost', handler=MainPage, name='MainPage'),
    webapp2.Route(r'/blog/<:\d+>', handler=PermaLink, name='PermanentLink'),
])