ValueError:无效的文字,无法用基数10转换为int,尝试从Google App引擎获取查询参数
我在使用Google App Engine从一个单独的条目获取数据时遇到了以下错误,比如说访问foobar.com/page/1时应该显示id为1的所有数据:
ValueError: invalid literal for int() with base 10
以下是相关文件:
Views.py
class One(webapp.RequestHandler):
def get(self, id):
id = models.Page.get_by_id(int(str(self.request.get("id"))))
page_query = models.Page.get(db.Key.from_path('Page', id))
pages = page_query
template_values = {
'pages': pages,
}
path = os.path.join(os.path.dirname(__file__), 'template/list.html')
self.response.out.write(template.render(path, template_values))
Urls.py:
(r'/browse/(\d+)/', One),
错误信息:
Traceback (most recent call last): File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 501, in __call__ handler.get(*groups) File "/Volumes/foobar/views.py", line 72, in get id = models.Page.get_by_id(int(str(self.request.get("id")))) ValueError: invalid literal for int() with base 10: ''
4 个回答
0
我在我的代码中遇到了类似的错误。我只是做了一个简单的处理,先把它转换成小数,然后再转换成整数,代码是 int(Decimal(str(self.request.get("id"))))
。
2
把 self.request.get("id")
改成简单的 id
,因为这个 id
已经在你的 get
处理函数里传递过来了。
你现在的代码只适用于像 /browse/1/?id=1
这样的链接。
1
我不太明白你想要实现什么。第一行:
id = models.Page.get_by_id(int(str(self.request.get("id"))))
是从查询字符串中获取一个ID,然后返回一个页面对象。为了让它和传入的参数一起工作,你可以把它改成:
id = models.Page.get_by_id(int(id))
第二行有点奇怪:
page_query = models.Page.get(db.Key.from_path('Page', id))
这行代码并不是返回一个查询,而是返回一个页面对象。如果你把'id'换成'int(id)',它的效果和第一行完全一样。你到底想要实现什么呢?