[Zope-CMF] Re: CMF and Five views: hooking up "POST"

yuppie y.2005- at wcm-solutions.de
Mon Oct 17 10:17:51 EDT 2005


Hi Tres!


Tres Seaver wrote:
> Lennart Regebro wrote:
>> On 10/17/05, yuppie <y.2005--E2EsyBC0hj3+aS/vkh9bjw at public.gmane.org> wrote:
>>
>>> I know that pattern, but I don't like it. [...]
>>> The code on the goldegg-folder_contents branch processes the input in
>>> the __call__ method of the view class. The template is only invoked if
>>> needed. It's much cleaner to use the template just for displaying
>>> results, not for triggering controllers.
>>
>> That's purely a matter of taste. From a principal standpoint I don't
>> think there is any difference, really.
> 
> I think we might be able to come up with a heuristic for choosing
> between the two patterns (this might be a mini pattern language, if
> refined):
> 
>  - For "simple" forms, which redisplay themselves even after a
>    successful POST, and which do not redirect, prefer a template-driven
>    version, and make the form self-posting;  in ZCML, use <browser:page>
>    with the 'template' attribute).  The classic 'document_edit' form
>    fits this bill, I think.

I don't know many use cases for 'simple' forms. 'document_edit' 
redirects to itself if 'change' was successful and to view if 
'change_and_view' was successful.

The redirect after a successful update is necessary to avoid further 
changes if people reload the page.

And even if we have a 'simple' form: A customized '__call__' method is 
simpler than a 'Update' method that has to be called from the template.

>  - If you have to add logic to the template to cope with possible
>    redirects, then publish a method of the view, and have the view
>    redirect or return a template;  in ZCML, use <browser:page> with
>    the 'attribute' variant.  "Add" forms fit this pattern, as well
>    as the folder_contents stuff that Yuppie has done.

If we call an 'attribute' we can't specify the template in ZCML. We have 
to hard-code the template in the view class. Using the '__call__' method 
we can get the advantages of both patterns. The folder_contents stuff 
uses the '__call__' method.

>  - For a set of inter-related pages sharing common view logic,
>    you may end up mixing and matching -- the ':method' bit on submit
>    button names is a way to get "off" the original template when
>    needed.  ZCML for this case may either be a mixture of the
>    'template' and 'attribute' variants of <browser:page>, or else
>    <brower:view> with several <page> subdirectives.

I don't like using ':method' because that pattern uses the same URL for 
different pages. But I never tried to use ':method' with views. Does 
that even work?


Cheers,

	Yuppie




More information about the Zope-CMF mailing list