jinja

Creator: coderz1093

Last updated:

Add to Cart

Description:

jinja

jinja #



Jinja (3.x) server-side template engine port for Dart 2.
Variables, expressions, control structures and template inheritance.
Version 0.6.0 introduces breaking changes #

FilterArgumentError error class removed
*args and **kwargs arguments support removed
Auto-escaping and related statements, filters and tests have been removed due to the impossibility of extending String.
Use the escape filter manually or escape values before passing them to the template.

For more information, see CHANGELOG.md.
Documentation #
It is mostly similar to Jinja templates documentation, differences provided below.
work in progress.
Differences with Python version #

The default filter compares values with null.
The defined and undefined tests compare values with null.
The map filter also compares values with null.
Use attribute and item filters for object.attribute and object[item] expressions.
If Environment({getAttribute}) is not passed, the getItem method will be used.
This allows you to use {{ map.key }} as an expression equivalent to {{ map['key'] }}.
Slices and negative indexes are not supported.
Macro arguments without default values are required.
Not yet implemented:

Choice and ignore missing include statement variants.


Not supported:

Template module.


work in progress

Dynamically invoked members #

[], +, -, *, /, ~/, % operators
object.length getter
object.call getter
Function.apply(function, ...)

Example #
import 'package:jinja/jinja.dart';

// ...

var environment = Environment(blockStart: '...', blockEnd: '...');
var template = environment.fromString('...source...');
print(template.render({'key': value}));
// or write directly to StringSink (IOSink, HttpResponse, ...)
template.renderTo(stringSink, {'key': value});
copied to clipboard
See also examples with conduit and
reflectable.
Status: #
TODO: #

Template class:

generate method
stream method


Relative template Paths
Async Support
Expressions

Dart Methods and Properties

!./?.




Loaders

PackageLoader (VM)
...


List of Global Functions

lipsum
dict
cycler
joiner


Extensions

i18n
Loop Controls
Debug Statement


Template compiler (builder)
...

Done: #
Note: item - not supported

Variables
Filters

forceescape
safe
unsafe


Tests

escaped


Comments
Whitespace Control
Escaping (only escape filter)
Line Statements

Comments
Blocks


Template Inheritance

Base Template
Child Template
Super Blocks
Nesting extends
Named Block End-Tags
Block Nesting and Scope
Required Blocks
Template Objects


HTML Escaping
List of Control Structures

For
If
Macro
Call
Filters
Assignments
Block Assignments
Extends
Blocks
Include
Import


Import Context Behavior
Expressions with filters and tests

Literals

"Hello World"
42 / 123_456
42.23 / 42.1e2 / 123_456.789
['list', 'of', 'objects']
('tuple', 'of', 'values')
{'dict': 'of', 'key': 'and', 'value': 'pairs'}
true / false


Math

+
-
/
//
%
*
**


Comparisons

==
!=
>
>=
<
<=


Logic

and
or
not
(expr)


Other Operators

in
is
|
~
()
./[]


If Expression

{{ list.last if list }}
{{ user.name if user else 'Guest' }}


Dart Methods and Properties (with reflection)

{{ string.toUpperCase() }}
{{ list.add(item) }}




List of Global Functions

print
range
list
namespace


Loaders

FileSystemLoader
MapLoader (DictLoader)


Extensions

Expression Statement
With Statement


Autoescape Overrides

Contributing #
Contributions are welcome! Please open an issue or pull request on GitHub.
Look at the ToDo list and comments in the code for ideas on what to work on.
There are no strict rules, but please try to follow the existing code style.
As non-native English speaker and learner, I will be grateful for any
corrections in the documentation and code comments.
Support #
Post issues and feature requests on the GitHub issue tracker.

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.