My favorites | Sign in
Project Home Downloads Wiki Issues Source
Project Information
Members
Featured
Downloads
Wiki pages
Links

NOTE The Code Repo Has Been Moved To GitHub

If you want the latest and greatest go to:

http://github.com/evanmiller/erlydtl

For documentation and stable releases, read on.

Introduction

ErlyDTL is an Erlang implementation of the Django Template Language. The erlydtl module compiles Django Template source code into Erlang bytecode. The compiled template has a "render" function that takes a list of variables and returns a fully rendered document.

The project is stable and mostly complete. Most but not all Django tags and filters have been implemented. See TagsAndFilters for a list of supported features.

Project mailing list: http://groups.google.com/group/erlydtl-users/

Basic example illustrating the syntax:

An ErlyDTL template is a text file (e.g.: a HTML or CSS file) containing variables to control the runtime template content, tags to control the runtime template logic and comments, which get filtered out.

Template file welcome.html:

   Welcome back, {{ name }}!

   You have {{ friends|length }} friends: {{ friends|join:", " }}

   Have some primes:
   {# this is exciting #}
   {% for i in primes %}
      {{ i }}
   {% endfor %}

Erlang code:

   erlydtl:compile("/path/to/welcome.html", welcome_template),
   welcome_template:render([
       {name, "Johnny"},
       {friends, [<<"Frankie Lee">>, <<"Judas Priest">>]},
       {primes, [1, 2, "3", <<"5">>]}
   ]).

Result:

   Welcome back, Johnny!

   You have 2 friends: Frankie Lee, Judas Priest

   Have some primes:
   1
   2
   3
   5

ErlyDTL reference

See the Overview for complete usage.

Tags and Filters

See TagsAndFilters for a list of the Django tags that ErlyDTL supports.

Other features

Variables can optionally be pre-set at template compilation, which is useful for stuff which doesn't change often. These variables get pre-rendered as much as possible at compilation time for maximum performance.

Optional recompilation: skip if compiled template exists already and template source checksum has not changed.

Templates accept variables as property list, dict, gb_tree or parameterized modules and the actual values can be numbers or strings (lists or binaries)

Variables, Tags and Comments can be wrapped with HTML comments (<!--, -->) for a possibly better integration with certain HTML editors / browser previews

Templates need not live on the local file system; you can write your own "reader" function, e.g. to read templates from network storage such as Amazon S3.

Requirements:

  • Erlang R12B-2

ToDo:

  • implement all tags and filters defined in original Django
  • allow funs as compile / render options for:
    • variables
    • output writer callback
    • source reading function
Powered by Google Project Hosting