我的Google appengine中有一个页面需要根据通过页面URL提供的参数从数据存储区中获取记录。页面的URL看起来像http://example.appspot.com/page/WILDCARD/,其中WILDCARD是记录的唯一标识符(32个字符的十六进制字符串)。然后它会获取WILDCARD指定的记录并将其显示在模板page.html
上,或者至少显示它应该做的事情。每当我以http://example.appspot.com/page/WILDCARD/访问该页面时,都会收到404错误。有谁知道为什么/有人可以说明为什么会出现这种情况的原因?感谢。
在我的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
只是默认的jinja环境,我非常确定没有任何问题。 RECORDS
是db.Model
类型类,其成员RECORD
,文本属性和recordid
,字符串属性。它目前没有填充任何数据。
编辑:没关系,我解决了这个问题。当我简化问题时,这是我自己的愚蠢。事实证明,在实际实现中(即本例的复杂版本),我认为我的URL与/ page /的实际内容之间存在微小的差异。道歉。
答案 0 :(得分:1)
尝试
webapp2.Route('/page/<recordID>/', handler=PageHandler)
用于路线定义。
您可以沿着其他路线元组插入它,例如:
app = webapp2.WSGIApplication([
('/', Homepage),
webapp2.Route('/page/<recordID>/', handler=PageHandler),
('/otherpage', SomeOtherPage)
])
您使用正确的正则表达式可能会正常工作但我发现在使用定义预期路径的模板URL并命名它们时,更容易阅读代码。
答案 1 :(得分:0)
没关系,我解决了这个问题。当我简化问题时,这是我自己的愚蠢。事实证明,在实际实现中(即本例的复杂版本),我认为我的URL与/ page /的实际内容之间存在微小的差异。道歉。
答案 2 :(得分:0)
这对我有用:
app = webapp2.WSGIApplication([
('/', Homepage),
('/page/.*', PageHandler),
('/otherpage', SomeOtherPage)
])