Reputation: 33
I received the following error when trying to retrieve data using Google App Engine from a single entry to a single page e.g. foobar.com/page/1 would show all the data from id 1:
ValueError: invalid literal for int() with base 10
Here are the files:
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),
Error:
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: ''
Upvotes: 3
Views: 27834
Reputation: 5
The error (as I'm sure that you know - or should know as it seems you have come very far in programming) means that you are typing/reading an invalid literal (invalid character) for something that should have base 10 value (i.e. 0-9 numbers).
Upvotes: 0
Reputation: 151
I had a similar error in one of my code. I just did a simple hack of converting it into decimal first and later converting it into int int(Decimal(str(self.request.get("id"))))
Upvotes: 0
Reputation: 101149
I'm not quite sure what you're trying to achieve here. The first line:
id = models.Page.get_by_id(int(str(self.request.get("id"))))
returns a Page object with an ID fetched from the query string. To make it work with the passed in argument, change it to:
id = models.Page.get_by_id(int(id))
Odder is the second line:
page_query = models.Page.get(db.Key.from_path('Page', id))
This does not return a query - it returns a page object, and if you replace 'id' with 'int(id)' does precisely the same thing as the first line. What are you trying to achieve here?
Upvotes: 1
Reputation: 212158
Change self.request.get("id")
to simply id
, which is already being passed to your get
handler.
The code, as you have it, would only work for URLs like /browse/1/?id=1
Upvotes: 2