Class NewTextTemplate
object --+
|
base.DirectiveFactory --+
|
base.Template --+
|
NewTextTemplate
Implementation of a simple text-based template engine. This class will
replace OldTextTemplate in a future release.
It uses a more explicit delimiting style for directives: instead of the old
style which required putting directives on separate lines that were prefixed
with a # sign, directives and commenbtsr are enclosed in delimiter pairs
(by default {% ... %} and {# ... #}, respectively).
Variable substitution uses the same interpolation syntax as for markup
languages: simple references are prefixed with a dollar sign, more complex
expression enclosed in curly braces.
>>> tmpl = NewTextTemplate('''Dear $name,
...
... {# This is a comment #}
... We have the following items for you:
... {% for item in items %}
... * ${'Item %d' % item}
... {% end %}
... ''')
>>> print(tmpl.generate(name='Joe', items=[1, 2, 3]).render(encoding=None))
Dear Joe,
<BLANKLINE>
<BLANKLINE>
We have the following items for you:
<BLANKLINE>
* Item 1
<BLANKLINE>
* Item 2
<BLANKLINE>
* Item 3
<BLANKLINE>
<BLANKLINE>
By default, no spaces or line breaks are removed. If a line break should
not be included in the output, prefix it with a backslash:
>>> tmpl = NewTextTemplate('''Dear $name,
...
... {# This is a comment #}\
... We have the following items for you:
... {% for item in items %}\
... * $item
... {% end %}\
... ''')
>>> print(tmpl.generate(name='Joe', items=[1, 2, 3]).render(encoding=None))
Dear Joe,
<BLANKLINE>
We have the following items for you:
* 1
* 2
* 3
<BLANKLINE>
Backslashes are also used to escape the start delimiter of directives and
comments:
>>> tmpl = NewTextTemplate('''Dear $name,
...
... \{# This is a comment #}
... We have the following items for you:
... {% for item in items %}\
... * $item
... {% end %}\
... ''')
>>> print(tmpl.generate(name='Joe', items=[1, 2, 3]).render(encoding=None))
Dear Joe,
<BLANKLINE>
{# This is a comment #}
We have the following items for you:
* 1
* 2
* 3
<BLANKLINE>
|
__init__(self,
source,
filepath=None,
filename=None,
loader=None,
encoding=None,
lookup=' strict ' ,
allow_exec=False,
delims=( ' {% ' , ' %} ' , ' {# ' , ' #} ' ) )
Initialize a template from either a string, a file-like object, or
an already parsed markup stream. |
|
|
Inherited from base.Template :
__getstate__ ,
__repr__ ,
__setstate__ ,
generate
Inherited from base.DirectiveFactory :
get_directive ,
get_directive_index
Inherited from object :
__delattr__ ,
__format__ ,
__getattribute__ ,
__hash__ ,
__new__ ,
__reduce__ ,
__reduce_ex__ ,
__setattr__ ,
__sizeof__ ,
__str__ ,
__subclasshook__
|
|
directives = [ ( ' def ' , <class 'genshi.template.directives.DefDi...
A list of (name, cls) tuples that define the set of directives
provided by this factory.
|
|
serializer = ' text '
hash(x)
|
Inherited from base.Template :
EXEC ,
EXPR ,
INCLUDE ,
SUB
|
__init__(self,
source,
filepath=None,
filename=None,
loader=None,
encoding=None,
lookup=' strict ' ,
allow_exec=False,
delims=( ' {% ' , ' %} ' , ' {# ' , ' #} ' ) )
(Constructor)
|
|
Initialize a template from either a string, a file-like object, or
an already parsed markup stream.
- Parameters:
source - a string, file-like object, or markup stream to read the
template from
filepath - the absolute path to the template file
filename - the path to the template file relative to the search
path
loader - the TemplateLoader to use for loading included
templates
encoding - the encoding of the source
lookup - the variable lookup mechanism; either "strict" (the
default), "lenient", or a custom lookup class
allow_exec - whether Python code blocks in templates should be
allowed
- Overrides:
object.__init__
- (inherited documentation)
|
directives
A list of (name, cls) tuples that define the set of directives
provided by this factory.
- Value:
[ ( ' def ' , <class 'genshi.template.directives.DefDirective'>) ,
( ' when ' , <class 'genshi.template.directives.WhenDirective'>) ,
( ' otherwise ' ,
<class 'genshi.template.directives.OtherwiseDirective'>) ,
( ' for ' , <class 'genshi.template.directives.ForDirective'>) ,
( ' if ' , <class 'genshi.template.directives.IfDirective'>) ,
( ' choose ' , <class 'genshi.template.directives.ChooseDirective'>) ,
( ' with ' , <class 'genshi.template.directives.WithDirective'>) ]
|
|
delimiters
- Get Method:
- _get_delims(self)
- Set Method:
- _set_delims(self,
delims)
- Delete Method:
''' The delimiters for directives and comments. This should be a fo
ur item tuple
of the form ``(directive_start, directive_end, comment_start,
comment_end)``, where each item is a string.
'''
|
|