I don't know if anyone's noticed, but the templating language seems
(at least from a usage standpoint) to be a lot like a Lisp
interpreter.
I know that sounds completely weird and random, but it's true. It's
like a very small subset of Scheme or something (the small subset
thing is necessary because you're not trying to put too much logic in
the template). I suppose the main difference is that blocks are
started and ended with explicit {% sometag %} and {% endsometag %}
statements instead of opening and closing parentheses.
If you need to refactor any of it, you might want to look at some
implementations of Lisp and steal some ideas.

Just a thought from a Lisper :)

Regards,
Zack

On Sep 18, 12:52 am, Malcolm Tredinnick <[EMAIL PROTECTED]>
wrote:
> On Wed, 2008-09-17 at 14:42 +0100, Ben Ford wrote:
> > I take it that most are aware of:
>
> >http://lucumr.pocoo.org/cogitations/2008/09/16/why-jinja-is-not-djang...
>
> > It seems like a very well thought out and thorough write up.
>
> Um .. welll. :-(
>
> Parts of it are very well thought out and if it had been a post on "how
> Jinja works" it would have been excellent. Other parts are completely
> unconstrained by facts or acknowledgement that Django's standard
> templates and Jinja's ones have different goals (which is important,
> since this isn't an apples to apples comparison at all). So that the
> flip side is on the record, here's my single contribution to it:
>
> The good news is that, as far as I can see, all the actual bugs he notes
> are already in tickets. I went through and checked quickly yesterday and
> found all but one, which I'm pretty sure is in there, so I'll look again
> today.
>
> Whilst reading that, keep in mind that Armin apparently misunderstands
> (or possibly just omits to clearly state) what a template object
> instance is in Django. It's a state machine for rendering templates and
> includes the current state as well as the transitions. This isn't an
> invalid or particularly novel approach to executing a domain specific
> language. In fact, it makes a lot of sense if you want to write
> self-contained node-based state instances. Jinja and Django templates
> have different compilation strategies and return different types of
> objects and the difference is a vital distinction in any discussion of
> appropriate usage. The blog post appears to imply that it would be
> natural for any random data structure to be used as a global variable
> (by extrapolation, since he doesn't establish that a Template instance
> -- not a class, the instance of a compiled template -- is special in any
> sense, so it must be somehow "normal") and that those structures will
> work beautifully when multiple threads cause its internal state to be
> modified.
>
> This has two problems: (1) it's pretty much false by default (Python !=
> Haskell, Erlang, etc and mutable objects are very normal in Python), and
> (2) it would imply that using lots of globals to store stuff in
> multi-threaded programs is a good idea that people should be doing more
> often.
>
> There's a name for that sort of programming style and it's not
> "Excellent, Maintainable Code". :-)
>
> Using the same logic, Python is not thread-safe at all and shouldn't be
> used, since lists, dictionaries, sets, and pretty much any random
> instance of a class object contain state in the instance that will
> change upon use. Tuples and strings are specially noted to be immutable
> and so are usable in those situations without extra locking, but they're
> special-cases, not the norm, in a pass-by-reference language. Using
> module-level globals sparingly is something we certainly encourage.
>
> Fortunately, this isn't a real issue, since there's nowhere that we
> suggest the assumption of immutability would be valid (and, really, a
> decent programmer is going to know that any arbitrary data structures
> have the same behaviour unless it's noted as immutable; minimal
> experience says that making assumptions contrary to that always leads to
> trouble). You create the template object as part of a view and render it
> and things are (mostly -- see next para) fine. There's no real need to
> put template instances into globals.
>
> The "mostly" bit is because we do have some reset-ability issues with
> things like the cycle tag -- so rendering it multiple times in the same
> thread of execution, such as creating mass mail, will lead to differing
> results.
>
> Also, so that it's on the record: Armin denigrating Eric Holscher for
> ticket #7501 was a low-blow for multiple reasons. One being that Armin
> either misunderstood or ignored the type of object that a Template
> instance is, as noted above. Another being that nominally avoiding
> mentioning specifics whilst giving enough information that somebody
> could easily find it out anyway is simply sleazy. It devalues Eric's
> work for that part of the audience who don't know the history and makes
> the author of the piece just look small. To fill in the missing pieces,
> I explicitly asked Eric to change the title at the Lawrence Sprint, as I
> was busy doing something else at the time and had been meaning to change
> it for a while and Eric was going through doing the scut work of making
> the changes through the Web browser interface whilst Jacob and I fed him
> decisions on various points. I made this change in full awareness of the
> difference between multi-threaded and multi-run use-cases and knowing
> that Template instances are just like lists, dictionaries,
> sets, ...(insert 150 other data structures here).
>
> All the bits in that blog post about Jinja, once understood in the
> context of why Jinja is a different templating approach to Django, were
> well done in that article. Reading the Jinja source is a pretty
> interesting thing to do, too and people should definitely play with the
> language if they haven't already. But it's not a one-for-one replacement
> for Django templates, nor is it a superset of functionality in either
> direction. It has different goals and neither Jinja nor Djangos' goals
> are invaildated by the other existing.
>
> The bugs noted in Django templates are things we've noted down and
> Johannes changes address a large number of them. We've always accepted
> speed improvements that don't completely break things, but we also
> realise that template rendering is just one component of the timeslice
> for a request and isn't the major piece unless your net time is pretty
> tiny anyway. With sensible caching strategy and real-world data and
> computation stuff, the amortised effect is that it's "fast enough", for
> most cases and making it possible to easily enough use a different
> templating language when it's not. That's a pretty good goal. Django
> ships with a template language for designers, not for Python
> programmers; another large difference between Django and Jinja
> templates, leading to the somewhat-perceived dichotomy over "logic in
> templates" (although in a lot of cases the big arguments people have
> come down to which template tags and filters should ship by default).
>
> It's always nice when somebody sits down and write out an holistic state
> of play of a particular portion of anything. It's very encouraging when,
> reading through, you realise that there aren't any really big surprises
> in the factual areas and it helps clarify where the differences of
> opinion are. Sanity checks of that nature cannot be undervalued. They
> can be written in a less confrontational style, however.
>
> Regards,
> Malcolm
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to