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

jürgen Kartnaller juergen at kartnaller.at
Mon Feb 27 06:52:33 EST 2006


Gary Poster 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"'

Thanks a lot for this.

The above metal statement doesn't work, I do it this way :
  metal:use-macro="view/base_template/macros/main"
and then
  metal:fill-slot="extra_info"

Jürgen


-- 

---------------------------------------------------
Jürgen Kartnaller   mailto:juergen_at_kartnaller.at
                    http://www.kartnaller.at
                    http://www.mcb-bregenz.at
---------------------------------------------------



More information about the Zope3-users mailing list