[Zope3-Users] Re: redirects in a formlib EditForm

Joel Moxley jfmoxley at gmail.com
Sun Feb 26 16:52:12 EST 2006


On 2/26/06, Gary Poster <gary at zope.com> wrote:
>
> On Feb 26, 2006, at 4:17 PM, jürgen Kartnaller wrote:
>
> > Joel Moxley wrote:
> >>>> ** What is the best way to use a formlib EditForm to redirect a
> >>>> user
> >>>> after applying changes without fully cloning a "handle_edit_action"
> >>>> method? **
> >>>>
> >>> I'm doing it this way :
> >>>
> >>>     def render(self):
> >>>         if self.errors is None or self.errors:
> >>>             return super(EditPerson, self).render()
> >>>         self.request.response.redirect('..')
> >>>
> >>> Jürgen
> >>
> >> Thanks Jürgen!  That works perfectly for me.
> >>
> >> Looking one step forward, I would like to redirect the user back to
> >> the previous page from whence they came (without using sessions).  I
> >> figure I am going to need to stash that value on my EditForm class
> >> and
> >> then pull it up during the redirect in my render method.  I've
> >> done my
> >> best to explore this, but I can't figure out where the previous page
> >> information will be available on my EditForm.
> >>
> >> ** Where should I stash previous page information for future
> >> redirects
> >> on my EditForm? **
> >
> > That's also an unsolved use case I have.
> >
> > The 'default' template of 'FormBase' contains the slot 'extra_info'
> > which could be filled with some hidden input fields.
> >
> > I defined a new template for my own EditForm.
> >
> > But now I would like to use the existing template in formlib
> > 'pageform.pt' and fill the slot but don't know how.
> >
> > Is this a possible way and the right way ?
> >
> > How can I use the existing template ?
> >   It must be useable with metal:use-macro somehow.
>
> Yes, we write custom templates that use hidden input fields.  We
> reuse the existing template by putting the default template on
> another attribute of the view class, and then saying 'metal:use-
> macro="view/...'
>
> For instance
>
> class MyForm(zope.formlib.form.EditForm):
>      base_template = zope.formlib.form.EditForm.template
>      template = (...a named template if you want, or just a page
> template directly...)
>
> Then in your template, you can refer to macros in the original like
> this:
>
>      'metal:use-macro="view/base_template/macros/extra_info"'
>
> Notice that the pageform.pt *extends* the context/@@standard_macros/
> view macro, so you can customize slots from your main template too.
>
> There are lots of other solutions, but that's the one I know of that
> I consider to be best ATM.
>
> Gary_______________________________________________
> Zope3-users mailing list
> Zope3-users at zope.org
> http://mail.zope.org/mailman/listinfo/zope3-users

Thanks.  Ok, so now that I know the location on which to stash
previous page information, _how_ do I get the previous page
information?

**
Ie, at what method in the edit form do I pull out the page from whence
the user came?  And most importantly, how do I get the page from
whence the user came?  Is it in the incoming request?  I've been
looking at the request object, but I did not see that information in
there.
**

So the idea is...

page X -> edit.html -> "apply" -> page X

... where page X can change.

Thanks,
J


More information about the Zope3-users mailing list