[Zope-dev] PythonLibraries Product
Tres Seaver
tseaver at zope.com
Thu Sep 11 02:44:59 EDT 2003
Evan Simpson wrote:
> Seb Bacon wrote:
> > Could you provide a brief summary of why this is better than a
> > folder of python scripts? Perhaps a use case which illustrates the
> > problems of the current way of doing things?
>
> It isn't *better* than a Folder of Scripts, it's *different* :-) I
> have two weak use-cases, a longstanding "I'm going to write that some
> day" itch, and some aesthetic arguments.
>
> One of the more frequently stated complaints about ZPTs is that to
> properly remove non-presentation logic and ugly little Python
> expressions from a template, you either need a pile of little Scripts,
> or a single "controller" Script that precalculates everything and
> passes it to the template. I've settled, fairly happily, on the
> second solution.
>
> Both of these solutions suffer from the "two or more objects to
> accomplish one task" management problem. I usually combine the
> objects in a dedicated Folder, which is still a bit awkward, and
> doesn't solve everything. One drawback is that the individual
> components are all published, despite the fact that I only intend
> one of them to be web-addressable. It would be very handy to attach
> the Scripts directly to the template, but the straightforward way of
> doing that means making the template a container, and opens a whole
> can of worms. Instead, what if templates had a Library tab, and it
> worked with External Editor? It would actually be easier to *just*
> write this, and not have independent Library objects, but generalizing
> this capability feels right to me
Actually, the restricted case is the one which has the real win; the
"free-floating" library is pretty, but not semanticaally needed. An
added argument: a ZPT with its own private library becomes, in effect,
a Zope3 view component; adopting such beasts will ease migration to
Zope3.
For the filesystem representation: what if we just have two files for
templates with libraries: 'foo.html' and 'foo.html.py'? Tools will
like that better than either of the approaches which try to preserve the
twins as a single file:
- Embedding the Python code into an HTML/XML comment at the head or
foot of the template in the .pt file will not let editors help with
syntax highlighting.
- In addition to messing up syntax highlighting, embedding the
template as a triple-quoted string literal in the .py file feels
*really* nasty (almost as nasty as Zope3's <script> tag).
And there is yet another argument for the bound library: it shows how
unnecessary, as well has how evil, that <script> tag hack is.
Refactoring a "one-off" template-cum-library will be simple, too: once
the refactored code is moved to a "real" module (even a persistent
module in Zope3!), the library can just contain
'from realmodule import usefulFunction', and the template won't need
to change.
I would vote for having the bound library's names inserted into the
'template' TALES namespace, BTW.
Tres.
--
===============================================================
Tres Seaver tseaver at zope.com
Zope Corporation "Zope Dealers" http://www.zope.com
More information about the Zope-Dev
mailing list