You are right. That happens in a few places. The problem is that dangling errors requires redirection to a different action therefore it makes the example more complex and shift the focus from the goal of the example.
On Apr 27, 10:27 am, frankz <[email protected]> wrote: > Thanks Yarko. > > Note I have no issues run the examples in the book. For example it > works if I openhttp://127.0.0.1/images/default/show/1 > it works great. > > the problem is the example seems not quite robust, if I point the > browser to htttp://127.0.0.1:8000/images/default/show > > It gives me an error. > > Ticket 127.0.0.1.2010-04-27.11-16-18.9e6c05a6-6ac6-446d-9e59- > f1c8b209343d > > Error traceback > > Traceback (most recent call last): > File "gluon/restricted.py", line 178, in restricted > File "C:/Documents and Settings/frank.zhu/My Documents/Downloads/ > web2py/applications/images/controllers/default.py", line 60, in > <module> > File "gluon/globals.py", line 96, in <lambda> > File "C:/Documents and Settings/frank.zhu/My Documents/Downloads/ > web2py/applications/images/controllers/default.py", line 16, in show > File "gluon/sql.py", line 3438, in __getitem__ > IndexError: list index out of range > > In file: C:\Documents and Settings\frank.zhu\My Documents\Downloads > \web2py\applications\images/controllers/default.py > > # -*- coding: utf-8 -*- > > ######################################################################### > ## This is a samples controller > ## - index is the default action of any application > ## - user is required for authentication and authorization > ## - download is for downloading files uploaded in the db (does > streaming) > ## - call exposes all registered services (none by default) > ######################################################################### > > def index(): > images = db().select(db.image.ALL, orderby=db.image.title) > return dict(images=images) > > def show(): > image = db(db.image.id==request.args(0)).select()[0] > if len(image) == 0: print "No images found!" > form = SQLFORM(db.comment) > form.vars.image_id = image.id > if form.accepts(request.vars, session): > response.flash = 'your comment is posted' > comments = db(db.comment.image_id==image.id).select() > return dict(image=image, comments=comments, form=form) > > I think now I know why, the request.args(0) doesn't contain any image > id, > so the following is one way to get around this issue > def show(): > id = request.args(0) or 1 # id default to 1 > image = db(db.image.id==id).select()[0] > form = SQLFORM(db.comment) > form.vars.image_id = image.id > if form.accepts(request.vars, session): > response.flash = 'your comment is posted' > comments = db(db.comment.image_id==image.id).select() > return dict(image=image, comments=comments, form=form) > > On Apr 26, 6:55 pm, Yarko Tymciurak <[email protected]> > wrote: > > > On Apr 26, 4:38 pm, frankz <[email protected]> wrote: > > > > Hi, > > > in the web2py official book, in the image blog example, > > > Referring tohttp://web2py.com/book/default/section/3/6?search=image+blog > > > > Could anyone help explain what the following line mean? > > > image = db(db.image.id==request.args(0)).select()[0] > > > This example code assume's you've entered an image in the database; if > > you have not, > > then the ....select()[0] reference would give you index out of > > range. > > > Here's why: > > > - This is a database select query; it's form is basically: > > > your_db_connection( WHERE clause; in this case where ID of the image > > table is same as what requested).select( fields - "ALL" by default) > > > This returns an array of records found in the database - if none, it > > returns an empty array, []. > > > A more robust way to write this (not used, so the example would be > > short) would be something like this: > > > images = db(db.image.id==request.args(0)).select() > > if len(images) == 0: print "No images found!" > > else: image = images[0] > > > I hope this has been helpful. > > Regards, > > - Yarko > > > > I duplicate the same code but I find URL > > > htttp://127.0.0.1:8000/images/default/show > > > gives me an error, "index out of range" > > > > How do I fix it? > > > > Thanks, > > > > -- > > > Subscription > > > settings:http://groups.google.com/group/web2py/subscribe?hl=en

