Hi Tres!
Tres Seaver wrote:
Lennart Regebro wrote:
On 10/17/05, yuppie <y.2005--E2EsyBC0hj3+aS/[EMAIL PROTECTED]> 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
_______________________________________________
Zope-CMF maillist - Zope-CMF@lists.zope.org
http://mail.zope.org/mailman/listinfo/zope-cmf
See http://collector.zope.org/CMF for bug reports and feature requests