| ================== |
| Alternative Syntax |
| ================== |
| |
| Jinja allows some syntax customization for the block delimiters. Depending on |
| the Jinja release more or less combinations are possible. The idea of an |
| customizable syntax is that you can update existing templates from other |
| template engines and programming languages easier and that you can replace |
| the django like default delimiters which are not everybody's favorite. |
| |
| |
| Configuring The Environment |
| =========================== |
| |
| For syntax configuration there are six arguments in the environment which |
| are the first six for convenience. Thus those two snippets do the same: |
| |
| .. sourcecode:: python |
| |
| env = Environment( |
| block_start_string='{%', |
| block_end_string='%}', |
| variable_start_string='{{', |
| variable_end_string='}}', |
| comment_start_string='{#', |
| comment_end_string='#}', |
| ) |
| |
| env = Environment('{%', '%}', '{{', '}}', '{#', '#]') |
| |
| |
| Ruby Like Syntax |
| ---------------- |
| |
| Here an example configuration for Ruby-like syntax: |
| |
| .. sourcecode:: python |
| |
| env = Environment('<%', '%>', '<%=', '%>', '<%#', '%>') |
| |
| An example template then looks like this: |
| |
| .. sourcecode:: rhtml |
| |
| <%# example eruby like configuration for Jinja %> |
| <ul> |
| <% for item in seq %> |
| <li><%= item %></li> |
| <% endâ€for %> |
| </ul> |
| |
| |
| SGML Comment Syntax |
| ------------------- |
| |
| Here an example configuration that uses SGML comments to hide the |
| processing instructions. This can be useful if you work with an WYSIWYG |
| designer: |
| |
| .. sourcecode:: python |
| |
| env = Environment('<!--', '-->', '${', '}', '<!--#', '-->') |
| |
| .. sourcecode:: html |
| |
| <!--# example SGML comment configuration for Jinja --> |
| <ul> |
| <!-- for item in seq --> |
| <li>${item}</li> |
| <!-- endfor --> |
| </ul> |
| |
| |
| Parenthesis Balancing |
| --------------------- |
| |
| Starting with Jinja 1.1 it's possible to use the block delimiter as a token |
| in the expression. That means that you can use small delimiters like single |
| braces or parenthesis. So if you want to have your variables to look like |
| ``${expr}`` and you still want to use dicts in such expressions you need |
| Jinja 1.1 or higher. |
| |
| |
| Block / Variable Tag Unification |
| ================================ |
| |
| If variable end and start tags are `None` or look the same as block tags and |
| you're running Jinja 1.1 or later the parser will switch into the |
| `no_comment_block` mode. In that mode it will try to match something as block |
| first and continue treating it as variable block if there is no known |
| directive for that name. Example: |
| |
| .. sourcecode:: python |
| |
| env = Environment('{', '}', None, None, '{*', '*}') |
| |
| This now allows smarty like templates: |
| |
| .. sourcecode:: smarty |
| |
| {* example smarty-like configuration for Jinja *} |
| {if something == 42} |
| Something is the answer to all questions and stuff like that. |
| {else} |
| Something is {something}. |
| {endif} |
| |
| This feature however can cause strange looking templates because there is no |
| visible difference between blocks and variables. |