I have a master-detail use case, the details function reads like:

def details():
    id=request.args[0]
    club=db(db.bedrijf.id==id).select
(db.bedrijf.bedrijfsnaam,db.bedrijf.kvk_nummer,\
    db.bedrijf.subdossiernummer,db.bedrijf.status)
    if club[0].status=='0':
        redirect(URL(a='site',c='default',f='index',args=id))
    else:
        address=db((db.adres.bedrijf==id)&
(db.adres.adressoort==1)).select(db.adres.ALL)
        nfas=db((db.bedrijfnfa.bedrijf==id)&
(db.bedrijfnfa.nfatype==db.nfatype.id))\
        .select
(db.bedrijfnfa.nfatype,db.bedrijfnfa.adres,db.nfatype.nfatype,orderby=db.bedrijfnfa.nfatype)
    if not (club or address or nfas): redirect(URL
(r=request,f='byplace'))
    return dict(club=club[0],address=address[0],nfas=nfas)


This works, however, when the visitor manipulates the id in the
browser an error ticket is issued:

Traceback (most recent call last):
  File "/Library/Python/2.5/site-packages/web2py_1_64_4/gluon/
restricted.py", line 107, in restricted
    exec ccode in environment
  File "/Library/Python/2.5/site-packages/web2py_1_64_4/applications/
core/controllers/clublocator.py", line 70, in <module>
  File "/Library/Python/2.5/site-packages/web2py_1_64_4/gluon/
globals.py", line 100, in <lambda>
    self._caller = lambda f: f()
  File "/Library/Python/2.5/site-packages/web2py_1_64_4/applications/
core/controllers/clublocator.py", line 56, in details
    id=request.args[0]
IndexError: list index out of range


Rewriting the function to read like:

def details():
    id=request.args[0]
    club=db(db.bedrijf.id==id).select
(db.bedrijf.bedrijfsnaam,db.bedrijf.kvk_nummer,\
    db.bedrijf.subdossiernummer,db.bedrijf.status)
    if not club:
      redirect(URL(r=request,c='default',f='index'))
    elif club[0].status=='0':
        redirect(URL(a='site',c='default',f='index',args=id))
    else:
        address=db((db.adres.bedrijf==id)&
(db.adres.adressoort==1)).select(db.adres.ALL)
        nfas=db((db.bedrijfnfa.bedrijf==id)&
(db.bedrijfnfa.nfatype==db.nfatype.id))\
        .select
(db.bedrijfnfa.nfatype,db.bedrijfnfa.adres,db.nfatype.nfatype,orderby=db.bedrijfnfa.nfatype)
    if not (club or address or nfas): redirect(URL
(r=request,c='default',f='index'))
    return dict(club=club[0],address=address[0],nfas=nfas)


i.e. adding:

if not club:
      redirect(URL(r=request,c='default',f='index'))

... solves the problem, but leaves me puzzled as to why this:

if not (club or address or nfas): redirect(URL
(r=request,c='default',f='index'))

... doesn't prevent the ticket from being issued.


Kind regards,

Annet.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to