Template engine (web)
|
|
This article has multiple issues. Please help improve it or discuss these issues on the talk page.
|
| This article is part of a series on |
| Web template systems |
|---|
Content (from a database), and "presentation specifications" (in a web template), are combined (through the template engine) to mass-produce web documents.
|
|
|
|
It has been suggested that this article be merged with Web template system. (Discuss) Proposed since January 2013. |
A (web) template engine is software that is designed to process web templates and content information to produce output web documents. It runs in the context of a template system.
Contents |
Types [edit]
Template engine is ordinarily included as a part of a web template system or application framework, and may be used also as preprocessor, filter, or template processor. Currently, template processing software is most frequently used in the context of development for the web.
XSLT is a template processing model designed by W3C. It is designed primarily for transformations on XML data (into web documents or other output).
Programming languages such as Perl, Ruby, C, and Java support template processing either natively, or through add-on libraries and modules. JavaServer Pages (JSP), PHP, and Active Server Pages (ASP with VBScript, JScript or other languages) are examples, themselves, of web template engines.
Typical features [edit]
Template engines typically include features common to most high-level programming languages, with an emphasis on features for processing plain text.
Such features include:
- variables and functions
- text replacement
- file inclusion (or transclusion)
- conditional evaluation and loops
Example [edit]
The accompanying illustration depicts a simplified processing model for a typical web template engine. The template engine produces a web page by processing the web template source file along with data from a relational database. The template engine replaces variables with specific values. In the illustration, substitution of $X by the database content (in page 01 "Mother", on page 02 "World").
A web template might look like this:
<html>
<h1>Hello {$X}</h1>
</html>
With additional template source code ...
templateAssign ('X', 'World');
... or, when specifying the relational database context:
$data[01]='Mother'; $data[02]='World';
templateAssign('X', $data[$i]);
Benefits [edit]
Benefits of using template engines include:
- Encouraging organization of source code into operationally-distinct layers (see e.g., MVC)
- Enhancing productivity by reducing unnecessary reproduction of effort
- Enhancing teamwork by allowing separation of work based on skill-set (e.g., artistic vs. technical)
Comparison [edit]
The following table lists the various template engines discussed on Wikipedia and a brief rundown of their features. The content here is a work in progress.
| Engine (implementation) | Languages | License | Platform | Variables | Functions | Includes | Conditional inclusion | Looping | Evaluation (language) | Assignment | Errors and exceptions | i18n | Natural templates | Inheritance |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Apache Velocity | Java, C# | Apache License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | ||
| action4JAVA | Java | Apache License | Cross-platform | Yes | No | Yes | Yes | Yes | No | Yes | Yes | |||
| ASP.NET (Microsoft) | C#, VB.NET | Proprietary | Microsoft Windows | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| ASP.NET (Mono) | C# | GNU LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| AutoGen | C | GPL license | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | |
| Beilpuz | PHP 5 | GNU LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | |||
| Blitz | PHP 5, PHP (C-module) | BSD-like | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | |||
| Casper | Java, JavaScript | MIT | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| CheetahTemplate | Python | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| Chip Template Engine | PHP, Perl | open-source? | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | Yes | No | |||
| Chunk Templates | Java | open-source | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes |
| CodeCharge Studio | Classic ASP, C#, VB.NET, PHP, Perl, Java/JSP, ColdFusion | Proprietary | Microsoft Windows | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | |
| ColdFusion | CFML, CFScript | Proprietary | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Cottle | C# | BSD License | Microsoft Windows | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | No | |
| csharptemplates | C# | New BSD | .NET | Yes | No | No | No | No | No | No | No | |||
| CTPP | C, C++, Perl, PHP, Python | BSD-like | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | No | Yes | |||
| dbPager | C++ | GNU GPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| Deihro TemplateEngine | PHP | Open source | Cross-platform | Yes | Yes | indirect | No | No | No | No | No | |||
| Dermis | Classic ASP | MIT License | Microsoft Windows | Yes | No | Yes | No | Yes | No | Yes | No | |||
| Django | Python | BSD-like | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
| Djolt-objc | Objective-C | Apache License | iPhone/MacOS | Yes | No | No | No | Yes | No | No | No | |||
| Dwoo | PHP 5 | BSD License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | Yes | Yes | |||
| Dylan Server Pages | Dylan | unknown | unknown | Yes | Yes | Yes | Yes | No? | No | No | No | |||
| ECT | JavaScript | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (CoffeeScript) | Yes | Yes | Yes | ||
| eRuby | Ruby | GPL / Ruby License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| Evoque Templating | Python, Py3K | AFL v3.0 | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Python) | No | Yes | |||
| FastTemplate | PHP | Artistic License | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | Yes | No | |||
| FigDice | PHP 5 | GPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
| FreeMarker | Java | BSD-like | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No |
| Genshi (templating language) | Python | BSD-like | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Python) | Yes | Yes | Yes | Yes | |
| Google-ctemplate | C++ | BSD License | Cross-platform | Yes | No | Yes | Yes | Yes | No | No | No | |||
| Grantlee Template System | C++/Qt | LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| GvTags | Groovy | Apache License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Groovy) | Yes | No | |||
| H2o | PHP, Ruby | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | |||
| HAH | PHP | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | Yes | No | |||
| Haml | Ruby, PHP (WIP) | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Ruby) | Yes | Yes | |||
| Hamlets | Java | BSD | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | |||
| Hyperkit PHP/XML Template Engine | PHP, XML | open-source | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| Histone template Engine | PHP, Java, JavaScript | Apache License | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | No | Yes | Yes |
| Jade | JavaScript, Java | open-source | Cross-platform | Yes | Yes | Yes | ||||||||
| JavaServer Pages | Java | CDDL + GPL License[1] | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| Jenner | JavaScript | LGPL | In-Browser | Yes | Yes | No | No | Yes | Yes | Yes (if allowed by hosting application) | Yes | |||
| jin-template | Java, PHP | LGPL | Cross-platform | Yes | No | No | No | No | No | Yes | No | |||
| Jinja | Python | BSD | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Python) | Yes | No | |||
| Jinja2 | Python | BSD | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Python) | Yes | Yes | Yes | ||
| JScore | PHP + JS | Proprietary | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| Kalahari | Python | BSD-like | Cross-platform | Yes | Yes | Through inheritance | No | Yes | No | Yes | Yes | |||
| Kid (templating language) | Python | MIT | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Python) | Yes | Yes | |||
| Mako | Python | MIT | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Python) | Yes | Yes | |||
| Mars-Templater | PHP 5 | MIT License | Cross-platform | Yes | No | No | Yes | Yes | No | No | No | |||
| MiniTemplator | PHP, Java, VB.NET | GNU LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | No | No? | |||
| mTemplate | PHP | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | |
| nTPL | node.js, JavaScript | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| Open Power Template | PHP 5 | BSD-like | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | Yes | Yes | |||
| Outline | PHP 5 | open-source | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | Yes | Yes? | |||
| PHAML | PHP | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | Yes | Yes? | |||
| Phammable | PHP 5 | GNU GPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | Yes | Yes | |||
| PHP | PHP | PHP License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | |
| PURE Unobtrusive Rendering Engine | Javascript | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| pyratemp | Python | MIT | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Python) | Yes | No | Yes | ||
| QueryTemplates | PHP 5, JavaScript | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| Railo | CFML | LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (CFML) | Yes | Yes | Yes | Yes | Yes |
| RainTPL | PHP | GNU LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | Yes | Yes | |||
| Rythm | Java | Apache License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Java) | Yes | Yes | Yes | Yes | |
| Scalate | Scala, Java | Apache License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Scala) | Yes | Yes | |||
| Scurvy | PHP | GNU GPL | Cross-platform | Yes | No | Yes | Yes | Yes | No | No | Yes | No | Yes | |
| Simplate | PHP | GPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| Simphple | PHP | GNU LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | No | Yes | Yes? | No | |
| Smarty | PHP | GNU LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | Yes | Yes? | Yes | Yes | |
| StampTE | PHP | BSD | Cross-platform | Yes | No | No | No | No | No | No | No | No | Yes | No |
| StringTemplate | Java (native), Python, C# | BSD[2] | Cross-platform | Yes | No | Yes | Yes | Yes | No | No | No | No | ||
| SUIT Framework | PHP, Python | GNU LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| / Talus' TPL | ||||||||||||||
| Template Attribute Language | Python, PHP 5 | open-source | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| ATal | PHP 5.3 | open-source | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
| Template Blocks | PHP 5 | GNU GPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | Yes | Yes? | |||
| Template Toolkit | Perl, Python | open-source | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (Perl) | Yes | Yes | |||
| Thymeleaf | Java | Apache License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| TinyButStrong | PHP | GNU LGPL | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
| Toupl | Any with OOP and String class support | Apache License | Cross-platform | Yes[3] | Yes[3] | Yes[3] | Yes[3] | Yes[3] | Yes[3] | Yes[3] | Yes[3] | |||
| Twig | PHP | BSD | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes | |
| uBook Template | PHP | GPL | Cross-platform | Yes | No | No | No | Yes | No | Yes | Yes | No | Yes | |
| Vemplator | PHP | MIT License | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes (PHP) | No | No | |||
| vlibTemplate | PHP | Artistic License | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | No | No | |||
| WebMacro | Java | open-source? | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||
| Younicycle | PHP 5, JavaScript, ActionScript | Proprietary | Cross-platform | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | |||
| ZeniTPL | PHP | new BSD | Cross-platform | Yes | No | No | No | Yes | No | Yes | No | |||
| BabaJS | Javascript | Open Source | Cross-platform | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No |
LEGEND:
- Engine (implementation) = engine name
- Languages = implementation language of the engine (not the template script language)
- License = Software license agreement
- Platform = Computing platform
- Variables = script language power to use variables
- Functions = script language power to use functions
- Includes = script language power include external files
- Conditional inclusion = script language power to conditional includes
- Looping = script language power to do loops (for, while) or recursion
- Evaluation (language) = script language power to do "eval command" (to the implementation language)
- Assignment = set names and references to sub-templates (?)
- Errors and exceptions = engine output script errors.
- i18n = Internationalization and localization feature
- Natural templates = the template can be a document as valid as the final result, the engine syntax doesn't break the document's structure
- Inheritance = Supports the ability to inherit a layout from a parent template, separately overriding arbitrary sections of the parent template's content.
References [edit]
See also [edit]
- Bytecode
- CodeCharge Studio
- Layout engine
- Macro preprocessor
- Preprocessor
- TinyButStrong (PHP: Template engine)
- Smarty (PHP: Template engine)
- Template engines
- Template processor
- Thymeleaf (Java: Template engine)
- Virtual machine
- VlibTemplate (PHP: Template engine)
External links [edit]
- Enforcing Strict Model-View Separation in Template Engines
- A Double-Model Approach to Achieve Effective Model-View Separation in Template Based Web Applications
- A PHP template engine comparison with graphic charts
- Comparisons/benchmarks of some Python template-engines and some generic thoughts about template-engines