[Zope3-dev] Re: Namespaces considered harmful [Was:
tal:define="..." considered harmful?]
Jean-Marc Orliaguet
jmo at ita.chalmers.se
Fri Feb 17 06:35:42 EST 2006
Stefan H. Holek wrote:
> My take is that it's not the TAL features (tal:define, python:,
> whatever) that invite misuse, but the available namespaces.
>
> I have ported ZPT to Django [1][2] and found the experience
> surprisingly refreshing. Django naturally does not have anything like
> "container" or "context" in the Zope sense. And by Django policy,
> templates don't even get to see the "request". The namespace Zope PTs
> call "options" becomes the sole, top-level namespace in Django PTs.
>
> This very effectively keeps me from pulling-in anything not provided
> by the view in the first place. Everything -- even functions I want
> to call in, say, conditions -- has to be added by the view. The
> result is clean and fast templates.
>
> Stefan
>
> [1] http://www.djangoproject.com
> [2] http://zope.org/Members/shh/DjangoPageTemplates/1.0.2/readme.txt
>
>
Yes, that's true, the thread later evolved towards the same conclusion
(removing "namespaces" in TAL). If the template needs to pull data from
different objects, tools or databases directly, then the template/view
is doing the job of the model.
However the opposite is also true:
the model should not do the job of the view and send information about
how data should be formatted:
for instance, the model can specify that an item is selected:
items: [{'id': 1, 'selected': true}]
but not:
items: [{'id': 1, 'font-style': 'bold'}]
for that matter, "python: " expressions are important to keep in order
to be able to map 'selected' to 'font-style: bold' (which is pure
presentation logic).
"tal:define" is OK if it handles presentation data that only the
template/view is concerned with.
/JM
original message:
> On 11. Feb 2006, at 21:03, Jean-Marc Orliaguet wrote:
>
>> I almost felt that something was missing, because I'm so used to
>> inserting "tal:define" in page templates. But now I realize that
>> this is a mistake.
>>
>> There was a discussion recently on the list about python expressions
>> being a bad idea, think twice I would say that "tal:define" is much
>> worse:
>>
>> When writing templates, the temptation is great to insert a
>> "tal:define" to pull some data into the view which is not directly
>> available in the model represented by the view. But the idea with a
>> template is that it should represent some data using some markup.
>> The data is supposed to be already available in some context. If the
>> presentation layer needs to cook some extra data, it means that
>> there isn't enough presentation data in the first place.
>
>
> --
> Anything that happens, happens. --Douglas Adams
>
>
More information about the Zope3-dev
mailing list