@@ -242,7 +242,7 @@ def _load_json5():
242
242
}
243
243
244
244
245
- def render (template_path , data , extensions , strict = False ):
245
+ def render (template_path , data , extensions , filters , strict = False ):
246
246
from jinja2 import (
247
247
__version__ as jinja_version ,
248
248
Environment ,
@@ -273,6 +273,13 @@ def render(template_path, data, extensions, strict=False):
273
273
env .globals ["environ" ] = lambda key : force_text (os .environ .get (key ))
274
274
env .globals ["get_context" ] = lambda : data
275
275
276
+ if filters :
277
+ from jinja2 .utils import import_string
278
+
279
+ for filter in set (filters ):
280
+ filter = import_string (filter )
281
+ env .filters [filter .__name__ ] = filter
282
+
276
283
return env .get_template (os .path .basename (template_path )).render (data )
277
284
278
285
@@ -362,7 +369,7 @@ def cli(opts, args):
362
369
363
370
out = codecs .getwriter ("utf8" )(out )
364
371
365
- out .write (render (template_path , data , extensions , opts .strict ))
372
+ out .write (render (template_path , data , extensions , opts .filters , opts . strict ))
366
373
out .flush ()
367
374
return 0
368
375
@@ -430,6 +437,14 @@ def main():
430
437
action = "append" ,
431
438
default = ["do" , "loopcontrols" ],
432
439
)
440
+ parser .add_option (
441
+ "-f" ,
442
+ "--filter" ,
443
+ help = "extra jinja2 filters to load" ,
444
+ dest = "filters" ,
445
+ action = "append" ,
446
+ default = [],
447
+ )
433
448
parser .add_option (
434
449
"-D" ,
435
450
help = "Define template variable in the form of key=value" ,
0 commit comments