Feature highlights
Evoque is generic, meaning it can be made to output text in any format and run in any context (stand-alone or integrated within an application framework) with state-of-the-art features such as: unicode, dynamic overlays, template caching, format-extensible automatic quoting, in-process sandbox -- while still remaining small, simple and extremely fast.
| Small footprint | Coming in at 992 SLOC. And 147 of those SLOC are consumed by the generic decodeh module for guessing a string's encoding. On the other hand this number does not include the code for the unit tests or the benchmarks. |
|---|---|
| Unicode | All internal processing is done on unicode string instances. There is no output encoding -- output is always in unicode. Applications may encode liberally.
Evoque includes an
advanced encoding guessing algorithm
for decoding
all template input/source files or strings
that may be in any encoding:
as a hint to help Evoque make the
correct guess, an |
| Template addressing / collections in a domain | Templates are organized in collections in a domain, and applications may define more than one domain. All templates within the same domain are addressable and invokable by each other, and share the same evaluation globals. On the other hand, templates in different domains are completely isolated from each other and are evaluated in distinct contexts. |
| Mixing/nesting directives | Conditionals, loops, nested templates, evoque'ations, comments may all be liberally intermixed and nested. |
| Automatic X/HTML input quoting / XSS protection | Thanks to the qpy.xml quoted-no-more class from the Qpy Templating package, providing automatic cross-site scripting protection by guaranteeing that all input is always quoted and quoted only once. To benefit from this feature Qpy needs to be installed -- running without Qpy only means that you must take care to do your input quoting manually (that is actually just what some other text templating systems expect you to do). If you do not wish to have any XSS vulnerabilities, then this is one killer feature you want! |
| Quoted-No-More / Extensible automatic quoting |
The unique and powerful automatic-input-quoting-once-and-only-once
feature for html/xml formats may be extended to any other source format
e.g. URL, SQL, LaTeX, etc, by
defining a custom quoted-no-more class
for that target format i.e. the equivalent of the |
| Expressions only | No python statements, nothing is ever exec'ed, thus the template evaluation context is more easily secured. Expressions may on the other hand be any valid python expression that will be evaluated within the passed (optionally restricted) evaluation context. |
| Restricted execution | Evaluation is within a managed, and optionally restricted, namespace; templates may be safely exposed to untrusted clients. |
| Managed evaluation namespace | Applications may extend evaluation namespace with any python callable or, naturally, with Qpy Templates. |
| All python % operator formatting | Expressions have the form ${expr !format} where the "!format" is optional, and defaults to "!s", i.e. default string rendering. The possible values for format are whatever is allowed by python's string formating operations. |
| Good error handling | Good template evaluation error handling making template development and debugging easy, while still allowing for secure deployment. |
| Template caching |
Templates, once compiled and loaded, are cached in memory.
Two settings are available:
|
| Data-driven template inheritance | See how easy it is to dynamically select the base template of a template hierarchy chain at runtime, based on a user's preferences. |
| Open-ended source or target file formats | Template source files as well as generated output may be in any text format. Any text source file, or pieces thereof, may be used as template -- makes it easy to assemble and evoque bits and pieces of content from any kind of source, and have it either rendered raw or evaluated. |
| Introspectable templates | Easily introspectable templates, of their signatures and evaluation namespace. |
| Whitespace control | A few powerful options to enable you to effectively format the template source for optimized readability, independently of targeted output whitespace. There is also support for a slurpy mode -- that will automatically retain and/or strip whitespace as you just need for most cases. |
| Comments | Evoque supports single-line, multi-line, and even nested comments -- convenient for commenting out entire blocks of template source during development -- all in one single simple syntax. In addition, python expressions may of course also be commented using standard python comments. |
| Simplicity | A trivially memorable syntax, only a handful of directives, easy management of different template collections, and few but consistently applied principles. |
| Speed | The simplicity of the implementation, and the awesome python builtins and standard library, translate into what may well be the fastest pure python templating system around. |