|
Changelog:
0.7.3
- [bug] legacy_html_escape function, used when
Markupsafe isn't installed, was using an inline-compiled
regexp which causes major slowdowns on Python 3.3;
is now precompiled.
- [bug] AST supporting now supports tuple-packed
function arguments inside pure-python def
or lambda expressions. [ticket:201]
- [bug] Fixed Py3K bug in the Babel extension.
- [bug] Fixed the "filter" attribute of the
<%text> tag so that it pulls locally specified
identifiers from the context the same
way as that of <%block> and <%filter>.
- [bug] Fixed bug in plugin loader to correctly
raise exception when non-existent plugin
is specified.
0.7.2
- [bug] Fixed regression in 0.7.1 where AST
parsing for Py2.4 was broken.
[ticket:193]
0.7.1
- [feature] Control lines with no bodies will
now succeed, as "pass" is added for these
when no statements are otherwise present.
Courtesy Ben Trofatter [ticket:146]
- [bug] Fixed some long-broken scoping behavior
involving variables declared in defs and such,
which only became apparent when
the strict_undefined flag was turned on.
[ticket:192]
- [bug] Can now use strict_undefined at the
same time args passed to def() are used
by other elements of the <%def> tag.
[ticket:191]
0.7.0
- [feature] Added new "loop" variable to templates,
is provided within a % for block to provide
info about the loop such as index, first/last,
odd/even, etc. A migration path is also provided
for legacy templates via the "enable_loop" argument
available on Template, TemplateLookup, and <%page>.
Thanks to Ben Trofatter for all
the work on this [ticket:125]
- [feature] Added a real check for "reserved"
names, that is names which are never pulled
from the context and cannot be passed to
the template.render() method. Current names
are "context", "loop", "UNDEFINED".
- [feature] The html_error_template() will now
apply Pygments highlighting to the source
code displayed in the traceback, if Pygments
if available. Courtesy Ben Trofatter
[ticket:95]
- [feature] Added support for context managers,
i.e. "% with x as e:/ % endwith" support.
Courtesy Ben Trofatter [ticket:147]
- [feature] Added class-level flag to CacheImpl
"pass_context"; when True, the keyword argument
'context' will be passed to get_or_create()
containing the Mako Context object.
[ticket:185]
- [bug] Fixed some Py3K resource warnings due
to filehandles being implicitly closed.
[ticket:182]
- [bug] Fixed endless recursion bug when
nesting multiple def-calls with content.
Thanks to Jeff Dairiki. [ticket:186]
- [feature] Added Jinja2 to the example
benchmark suite, courtesy Vincent FĂ©rotin
0.6.2
- [bug] The ${{"foo":"bar"}} parsing issue is fixed!!
The legendary Eevee has slain the dragon!
[ticket:20]. Also fixes quoting issue
at [ticket:86].
0.6.1
- [bug] Added special compatibility for the 0.5.0
Cache() constructor, which was preventing file
version checks and not allowing Mako 0.6 to
recompile the module files.
0.6.0
- [feature] Template caching has been converted into a plugin
system, whereby the usage of Beaker is just the
default plugin. Template and TemplateLookup
now accept a string "cache_impl" parameter which
refers to the name of a cache plugin, defaulting
to the name 'beaker'. New plugins can be
registered as pkg_resources entrypoints under
the group "mako.cache", or registered directly
using mako.cache.register_plugin(). The
core plugin is the mako.cache.CacheImpl
class.
- [feature] Added support for Beaker cache regions
in templates. Usage of regions should be considered
as superseding the very obsolete idea of passing in
backend options, timeouts, etc. within templates.
- [feature] The 'put' method on Cache is now
'set'. 'put' is there for backwards compatibility.
- [feature] The <%def>, <%block> and <%page> tags now accept
any argument named "cache_*", and the key
minus the "cache_" prefix will be passed as keyword
arguments to the CacheImpl methods.
- [feature] Template and TemplateLookup now accept an argument
cache_args, which refers to a dictionary containing
cache parameters. The cache_dir, cache_url, cache_type,
cache_timeout arguments are deprecated (will probably
never be removed, however) and can be passed
now as cache_args={'url':<some url>, 'type':'memcached',
'timeout':50, 'dir':'/path/to/some/directory'}
- [feature/bug] Can now refer to context variables
within extra arguments to <%block>, <%def>, i.e.
<%block name="foo" cache_key="${somekey}">.
Filters can also be used in this way, i.e.
<%def name="foo()" filter="myfilter">
then template.render(myfilter=some_callable)
[ticket:180]
- [feature] Added "--var name=value" option to the mako-render
script, allows passing of kw to the template from
the command line. [ticket:178]
- [feature] Added module_writer argument to Template,
TemplateLookup, allows a callable to be passed which
takes over the writing of the template's module source
file, so that special environment-specific steps
can be taken. [ticket:181]
- [bug] The exception message in the html_error_template
is now escaped with the HTML filter. [ticket:142]
- [bug] Added "white-space:pre" style to html_error_template()
for code blocks so that indentation is preserved
[ticket:173]
- [bug] The "benchmark" example is now Python 3 compatible
(even though several of those old template libs aren't
available on Py3K, so YMMV) [ticket:175]
|
|
Changelog:
0.5
- A Template is explicitly disallowed
from having a url that normalizes to relative outside
of the root. That is, if the Lookup is based
at /home/mytemplates, an include that would place
the ultimate template at
/home/mytemplates/../some_other_directory,
i.e. outside of /home/mytemplates,
is disallowed. This usage was never intended
despite the lack of an explicit check.
The main issue this causes
is that module files can be written outside
of the module root (or raise an error, if file perms aren't
set up), and can also lead to the same template being
cached in the lookup under multiple, relative roots.
TemplateLookup instead has always supported multiple
file roots for this purpose.
[ticket:174]
0.4.2
- Fixed bug regarding <%call>/def calls w/ content
whereby the identity of the "caller" callable
inside the <%def> would be corrupted by the
presence of another <%call> in the same block.
[ticket:170]
- Fixed the babel plugin to accommodate <%block>
[ticket:169]
0.4.1
- New tag: <%block>. A variant on <%def> that
evaluates its contents in-place.
Can be named or anonymous,
the named version is intended for inheritance
layouts where any given section can be
surrounded by the <%block> tag in order for
it to become overrideable by inheriting
templates, without the need to specify a
top-level <%def> plus explicit call.
Modified scoping and argument rules as well as a
more strictly enforced usage scheme make it ideal
for this purpose without at all replacing most
other things that defs are still good for.
Lots of new docs. [ticket:164]
- a slight adjustment to the "highlight" logic
for generating template bound stacktraces.
Will stick to known template source lines
without any extra guessing. [ticket:165]
0.4.0
- A 20% speedup for a basic two-page
inheritance setup rendering
a table of escaped data
(see http://techspot.zzzeek.org/2010/11/19/quick-mako-vs.-jinja-speed-test/).
A few configurational changes which
affect those in the I-don't-do-unicode
camp should be noted below.
- The FastEncodingBuffer is now used
by default instead of cStringIO or StringIO,
regardless of whether output_encoding
is set to None or not. FEB is faster than
both. Only StringIO allows bytestrings
of unknown encoding to pass right
through, however - while it is of course
not recommended to send bytestrings of unknown
encoding to the output stream, this
mode of usage can be re-enabled by
setting the flag bytestring_passthrough
to True.
- disable_unicode mode requires that
output_encoding be set to None - it also
forces the bytestring_passthrough flag
to True.
- the <%namespace> tag raises an error
if the 'template' and 'module' attributes
are specified at the same time in
one tag. A different class is used
for each case which allows a reduction in
runtime conditional logic and function
call overhead. [ticket:156]
- the keys() in the Context, as well as
it's internal _data dictionary, now
include just what was specified to
render() as well as Mako builtins
'caller', 'capture'. The contents
of __builtin__ are no longer copied.
Thanks to Daniel Lopez for pointing
this out. [ticket:159]
|
|
syntax which compiles into Python modules for maximum performance. Mako's
syntax and API borrows from the best ideas of many others, including Django
templates, Cheetah, Myghty, and Genshi. Conceptually, Mako is an embedded
Python (i.e. Python Server Page) language, which refines the familiar ideas of
componentized layout and inheritance to produce one of the most straightforward
and flexible models available, while also maintaining close ties to Python
calling and scoping semantics.
|