2014-08-29 59 views
0

我在我的Google appengine中有一个页面,需要根据通过页面URL提供的参数从数据存储中获取记录。该页面的URL看起来像http://example.appspot.com/page/WILDCARD/,其中WILDCARD是记录的唯一标识符(32个字符的十六进制字符串)。然后它会记录WILDCARD指定的记录并将其显示在模板page.html上,或者至少这是它应该执行的操作。无论何时我以http://example.appspot.com/page/WILDCARD/的身份访问该页面,都会收到404错误。有谁知道为什么/有谁可以提出为什么这可能是原因?谢谢。Appengine通配符URL问题

在我WSGI类处理程序,我有

('/page/([^/]+)/', PageHandler), 

PageHandler类本身就是

class PageHandler(webapp2.RequestHandler): 
    def get(self, recordID): 
      allrecords = db.GqlQuery("SELECT RECORD FROM RECORDS WHERE recordid = :record",record = recordID) 
      if not allrecords: 
       self.redirect("../") #the URL is screwed up, so we're redirecting you back to the main page 
      else: 
       for row in allrecords: 
        template = JINJA.get_template("page.html") 
        self.response.out.write(template.render({ "recordtext":row.RECORD, "recordid":recordID })) 

其他细节:JINJA只是默认神社的环境,我敢肯定,没有什么那是错的。 RECORDS是一个db.Model类型类,它具有成员RECORD(文本属性)和recordid(字符串属性)。目前尚未填充任何数据。

编辑:没关系,我解决了这个问题。当我简化问题时,这是我自己的愚蠢。事实证明,在实际实施中(即这个例子的复杂版本),我认为我的网址和它实际用于/ page /之间的差异很小。道歉。

+0

你可以链接你的app.yaml吗?我认为重定向可能根本就不会在那里正确地进行。 – Patrice 2014-08-29 17:25:53

+0

我的app.yaml从这个简单的例子非常不同,但唯一的线在我的YAML配置相关与这个页面的处理程序是: - 网址:* 脚本:main.app 安全:总是 – user3059347 2014-08-29 18:37:48

回答

1

尝试

webapp2.Route('/page/<recordID>/', handler=PageHandler) 

您的路由定义。

您可以沿着您的其它路线的元组就像插入:

app = webapp2.WSGIApplication([ 
    ('/', Homepage), 
    webapp2.Route('/page/<recordID>/', handler=PageHandler), 
    ('/otherpage', SomeOtherPage) 
]) 

你有什么可能与适当的正则表达式正常工作很好,但我觉得它更容易使用的模板的网址定义预期路径,并命名时读取代码他们。

查看更多:https://webapp-improved.appspot.com/guide/routing.html

+0

实际上我用' app = webapp2.WSGIApplication([urls和handlers的元组])'作为我的应用程序定义,就像在基本的Appengine Python教程中使用的那样。你能告诉我如何使用上面的很多页面/链接到资源使用上述和/或修改用于WSGIApplication方法吗?对不起,我有点小菜一碟! – user3059347 2014-08-29 18:41:48

+0

你可以简单地沿着你的其他元组插入这一行,看到更新的答案,因为显然我不能在这里写代码。 – 2014-08-29 19:04:34

+0

嗯,这很奇怪,页面仍然会导致一个404。 – user3059347 2014-08-29 19:13:56

0

没关系,我解决了这个问题。当我简化问题时,这是我自己的愚蠢。事实证明,在实际实施中(即这个例子的复杂版本),我认为我的网址和它实际用于/ page /之间的差异很小。道歉。