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

jürgen Kartnaller juergen at kartnaller.at
Mon Feb 27 07:02:20 EST 2006


Joel Moxley wrote:
> 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?

self.request.getHeader('HTTP_REFERER')

> 
> **
> 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


-- 

---------------------------------------------------
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