Dear Joe , What i want to do is to have a query like this :
db( (db.table.Field1 == value) & (db.table.Field2 == value or value)) i tried it i get no errors but its now working Regards On Wed, Nov 7, 2012 at 10:10 AM, Joe Barnhart <[email protected]>wrote: > I see -- you're right. > > The request.args structure is a List() object which web2py defines to > retrieve values without the exception if it doesn't exist. It has some > additional interesting capabilities... You can define a default value, > such as this: > > > request.args(0,default='Both') > > > This will substitute the value 'Both' for request.args[0] should it be set > to None or be invalid. Or you could cast a string value to an integer -- > this often happens since the request.args are strings by default, but I > often pass row ids to be processed elsewhere: > > > URL('default','editrecord',args=[22]) > > > Becomes: > > > http://...../default/editrecord/22 > > > And request.args[0] is now '22' (the string). So we use the "cast" > keyword to change it to an int: > > > request.args(0,cast=int) > > > There is a ton of behavior in this little class! Thanks for pointing it > out to me. > > -- Joe Barnhart > > > class List(list): > """ > Like a regular python list but a[i] if i is out of bounds return None > instead of IndexOutOfBounds > """ > > def __call__(self, i, default=None, cast=None, otherwise=None): > """ > request.args(0,default=0,cast=int,otherwise='http://error_url') > request.args(0,default=0,cast=int,otherwise=lambda:...) > """ > n = len(self) > if 0 <= i < n or -n <= i < 0: > value = self[i] > else: > value = default > if cast: > try: > value = cast(value) > except (ValueError, TypeError): > from http import HTTP, redirect > if otherwise is None: > raise HTTP(404) > elif isinstance(otherwise, str): > redirect(otherwise) > elif callable(otherwise): > return otherwise() > else: > raise RuntimeError("invalid otherwise") > return value > > > > > On Tuesday, November 6, 2012 2:24:53 PM UTC-8, Niphlod wrote: >> >> >> One more point -- your "request.args(1)" should be "request.args[1]" >>> (with square brackets). The first form calls request.args as a function >>> and passes it the value "1". The second form treats request.args as a >>> Storage object and asks for the subscript "1". >>> >>> -- Joe Barnhart >>> >>> Nope, request.args(1) does basically >> try: >> result = request.args[1] >> except: >> result = None >> return result >> >> the () notation is safer because using request.args[1] if there is no >> request.args[1] you get an exception. >> > -- > > > > --

