You could also try by just passing the parameter to URL and not invoking the request.application, request.controllers, etc.
Try : URL(a="application", c="your controller"...) Richard On Thu, Mar 8, 2012 at 4:26 PM, Richard Vézina <[email protected]>wrote: > If it is only at redirect, I think it's because you don't use current. I > can't explain the rational, but just try, you may be suprise... > > redirect(URL(request.application, request.controller, > 'index')) > > Richard > > > On Thu, Mar 8, 2012 at 2:23 PM, Cliff <[email protected]> wrote: > >> I can see both the form and crumb_trail. >> >> That's the strange part - everything works fine up to the redirect. >> >> I will try calling trashit as you suggest, though. It had occurred to >> me that it might be a possibility. >> >> But I don't understand why it should not work... >> >> On Mar 8, 2:11 pm, Richard Vézina <[email protected]> wrote: >> > Ok then, I think you have to map your form >> > >> > ### Controller: >> > def trash(): >> > import trash_it >> > return trash_it.trashit(request, session,response, db) >> > >> > From trash_it.trashit() return : >> > >> > return dict( form=form, crumb_trail=crumb_trail) >> > >> > So, your controller trash() function should look like this... >> > >> > ### Controller: >> > def trash(): >> > import trash_it >> > from, crumb_trail = trash_it.trashit(request, session,response, db) >> > return dict( form=form, crumb_trail=crumb_trail) >> > >> > I am not sure, but you can try... >> > >> > Do you see your form and crumb_trail object in your controller trash() >> > function view?? >> > >> > If you don't it may because of mapping issue... >> > >> > Richard >> > >> > >> > >> > >> > >> > >> > >> > On Thu, Mar 8, 2012 at 1:58 PM, Cliff <[email protected]> wrote: >> > > Yes, it works. >> > >> > > Every controller has a trash function because every index table has a >> > > trash link. Similar to the way grid has a delete button on its index >> > > tables. >> > >> > > It is like this: >> > >> > > def index(): >> > > query = db.sometable.is_active==True >> > > if such_and_such: >> > > query = query & db.sometable.somefield== foo >> > > ... >> > >> > > So I don't want to copy/paste this generic function in every >> > > controller. >> > >> > > I guess I could do a redirect and then redirect back, but I need to >> > > understand modules better so that's the approach I tried. >> > >> > > On Mar 8, 1:08 pm, Richard Vézina <[email protected]> >> wrote: >> > > > If you bring your module trashit function into controller does it >> work? >> > >> > > > Make what you try to do (I mean define a "page" controller function >> into >> > > > module) and what the utility to put the trash function into module? >> > > Modules >> > > > are useful for function you want to use every where (any controller >> > > files) >> > > > without having to copy/paste them. But I don't see the utility for >> page >> > > > controller function... Why not just make a controller file for you >> trash >> > > > function and redirect from one an other controller when you need >> this >> > > > function??? >> > >> > > > Richard >> > >> > > > On Thu, Mar 8, 2012 at 12:52 PM, Cliff <[email protected]> wrote: >> > > > > Here is the controller >> > >> > > > > ### Controller: >> > > > > def trash(): >> > > > > import trash_it >> > > > > return trash_it.trashit(request, session,response, db) >> > >> > > > > On Mar 8, 12:06 pm, Richard Vézina <[email protected]> >> > > > > wrote: >> > > > > > I didn't see rapidly other problem in the code... >> > >> > > > > > The only thing I could suspect is if you use directly (I mean >> call >> > > the >> > > > > > module trashit function from the URL) trashit... >> > >> > > > > > Since it is a parameted function if won't be allowed to execute >> it >> > > from >> > > > > the >> > > > > > URL. >> > >> > > > > > We don't see your controller... >> > >> > > > > > Also, maybe try without sub-func "crumbs.do_crumbs(session, >> request, >> > > > > db)" >> > > > > > first and then add it... >> > >> > > > > > Richard >> > >> > > > > > On Thu, Mar 8, 2012 at 11:45 AM, Cliff <[email protected]> >> wrote: >> > > > > > > Richard, >> > >> > > > > > > Thanks for the hints. >> > >> > > > > > > You can pass the response object to a module directly, without >> > > using >> > > > > > > current. I have other modules that work this way; the only >> > > problem is >> > > > > > > the long parms list. >> > >> > > > > > > I know the html imports are working correctly because the form >> > > > > > > renders. >> > > > > > > I suspect the http imports are working because no exception >> gets >> > > > > > > raised and the the traceback points to gluon/http.py. So it >> must >> > > be >> > > > > > > imported. >> > >> > > > > > > On Mar 8, 11:21 am, Richard Vézina < >> [email protected]> >> > > > > > > wrote: >> > > > > > > > You may check if those import are working properly : >> > >> > > > > > > > from html import FORM, H2, P, BR, INPUT, URL >> > > > > > > > from http import HTTP, redirect >> > >> > > > > > > > Could it be possible that it should be import like this : >> > >> > > > > > > > from gluon.html import FORM?? >> > >> > > > > > > > Richard >> > >> > > > > > > > On Thu, Mar 8, 2012 at 11:09 AM, Richard Vézina < >> > > > > > > [email protected] >> > >> > > > > > > > > wrote: >> > > > > > > > > I think you will need to read a bit about current, >> > > > > current.response, >> > > > > > > > > current.request, etc. >> > >> > > > > > > > > Richard >> > >> > > > > > > > > On Thu, Mar 8, 2012 at 11:04 AM, Cliff <[email protected]> >> > > wrote: >> > >> > > > > > > > >> What am I doing wrong? >> > >> > > > > > > > >> This code works fine in a controller. When moved to a >> module >> > > it >> > > > > fails >> > > > > > > > >> with a 303 error. >> > > > > > > > >> Here is the code: >> > >> > > > > > > > >> ### Controller: >> > > > > > > > >> def trash(): >> > > > > > > > >> import trash_it >> > > > > > > > >> return trash_it.trashit(request, session,response, db) >> > >> > > > > > > > >> ## module trash_it.py >> > > > > > > > >> from html import FORM, H2, P, BR, INPUT, URL >> > > > > > > > >> from http import HTTP, redirect >> > >> > > > > > > > >> def trashit(request, session, response, db): >> > > > > > > > >> import crumbs >> > > > > > > > >> crumb_trail = crumbs.do_crumbs(session, request, db) >> > > > > > > > >> form = FORM( >> > > > > > > > >> H2('Are you sure?'), >> > > > > > > > >> P('Do you really want to move the item to the >> trash?'), >> > > > > > > > >> BR(), >> > > > > > > > >> INPUT(_type='submit', _name='yes', _value='Yes, >> trash >> > > it', >> > > > > > > > >> _style='margin-right:1em' >> > > > > > > > >> ), >> > > > > > > > >> INPUT(_type='submit', _name='no', _value='No'), >> > > > > > > > >> ) >> > > > > > > > >> response.view = 'are_you_sure.html' >> > >> > > > > > > > >> if form.accepts(request, session): >> > > > > > > > >> if 'yes' in request.post_vars: >> > > > > > > > >> db[request.controller][request.args(0)] = >> > > > > > > > >> dict(is_active=False) >> > > > > > > > >> session.flash = 'Item moved to trash.' >> > > > > > > > >> redirect(URL(request.application, >> > > request.controller, >> > > > > > > > >> 'index')) >> > > > > > > > >> elif 'no' in request.post_vars: >> > > > > > > > >> session.flash = 'Trash cancelled.' >> > > > > > > > >> redirect(URL(request.application, >> > > request.controller, >> > > > > > > > >> 'index')) >> > > > > > > > >> else: >> > > > > > > > >> response.flash = 'Just checking.' >> > >> > > > > > > > >> return dict( form=form, crumb_trail=crumb_trail) >> > >> > > > > > > > >> # The traceback >> > >> > > > > > > > >> Traceback (most recent call last): >> > > > > > > > >> File "/media/Myfiles/3-o/gluon/main.py", line 493, in >> > > wsgibase >> > > > > > > > >> serve_controller(request, response, session) >> > > > > > > > >> File "/media/Myfiles/3-o/gluon/main.py", line 202, in >> > > > > > > > >> serve_controller >> > > > > > > > >> page = run_controller_in(request.controller, >> > > request.function, >> > > > > > > > >> environment) >> > > > > > > > >> File "/media/Myfiles/3-o/gluon/compileapp.py", line >> 537, in >> > > > > > > > >> run_controller_in >> > > > > > > > >> restricted(code, environment, filename) >> > > > > > > > >> File "/media/Myfiles/3-o/gluon/restricted.py", line >> 204, in >> > > > > > > > >> restricted >> > > > > > > > >> exec ccode in environment >> > > > > > > > >> File >> "/media/Myfiles/3-o/applications/operations/controllers/ >> > > > > > > > >> buckslips.py", line 344, in <module> >> > > > > > > > >> File "/media/Myfiles/3-o/gluon/globals.py", line 172, in >> > > <lambda> >> > > > > > > > >> self._caller = lambda f: f() >> > > > > > > > >> File >> "/media/Myfiles/3-o/applications/operations/controllers/ >> > > > > > > > >> buckslips.py", line 341, in trash >> > > > > > > > >> return trash_it.trashit(request, session,response, db) >> > > > > > > > >> File "applications/operations/modules/trash_it.py", >> line 22, >> > > in >> > > > > > > > >> trashit >> > > > > > > > >> redirect(URL(request.application, request.controller, >> > > 'index'), >> > > > > > > > >> File "/media/Myfiles/3-o/gluon/http.py", line 128, in >> > > redirect >> > > > > > > > >> Location=location) >> > > > > > > > >> HTTP: 303 SEE OTHER >> > >

