我正在传递处理程序的url中传递模型实体的id,而在另一个我只需要从该id中查找属性值。
class Pdf(db.Model):
name = db.StringProperty(required=True)
class InputHandler(Handler):
def get(self):
self.render('cert_form.html')
def post(self):
name = self.request.get('name')
if name:
a = Pdf(name=name)
a.put()
self.redirect('/key=%s' % a.key())
else:
error = "Please enter your full name."
self.render('cert_form.html')
class PDFHandler(Handler):
def get(self, id):
a = db.Key.from_path('Pdf', id)
self.response.write(a.name())
application = webapp2.WSGIApplication([
(r'/', InputHandler),
(r'/key=(.)+', PDFHandler),
], debug=True)
答案 0 :(得分:1)
self.redirect('%s' % str(a.key().id()))
(除了%s的完全冗余和str - 失去str调用! - )重定向到一个非常随意的字符串的URL。你是如何路由的,大概是PDFHandler
,所以它可以得到它id
?
更明智和常见的方法是重定向到,例如,
'/pdfh?id=%s' % urllib2.urlencode(whatever)
或者可能更好
'/pdfh?k=%s' % a.key().urlsafe()
并在处理程序中使用self.request.get
来获取id(或者更好的是url-safe形式的密钥,为ndb.Key(urlsafe=...
调用做好准备,以便为您提供实际使用的密钥)。< / p>
这些方法使得路由显而易见 - 用你非常特殊的方法,我需要看到路由来解释为什么它不起作用(这种奇怪的路由工作的机会不是零,但是,非常小的:-)。顺便说一句,我需要在app.yaml中看到第一层路由,在Python代码中看到第二层。
或者,您可以切换到更合理的URL方案,并在23秒内完成: - )。