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

Gary Poster gary at zope.com
Sun Feb 26 16:37:19 EST 2006


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


More information about the Zope3-users mailing list