New submission from Josip Delic <delij...@gmail.com>:
added macro support for repoze.bfg.jinja2 with test ;-)
----------
files: jinja2_macro.patch
messages: 256
nosy: delijati
priority: bug
status: unread
title: Macro support for repoze.bfg.jinja2
__________________________________
Repoze Bugs <b...@bugs.repoze.org>
<http://bugs.repoze.org/issue97>
__________________________________
Index: repoze/bfg/jinja2/tests/test_bindings.py
===================================================================
--- repoze/bfg/jinja2/tests/test_bindings.py (Revision 6447)
+++ repoze/bfg/jinja2/tests/test_bindings.py (Arbeitskopie)
@@ -143,4 +143,13 @@
response = self._callFUT('templates/helloworld.jinja2')
self.assertEqual(response.app_iter[0],
u'\nHello f\xf6\xf6'.encode('utf-8'))
+
+class TestRenderMacroTemplate(unittest.TestCase):
+ def _callFUT(self, path):
+ from repoze.bfg.jinja2.bindings import render_template
+ return render_template(path)
+ def test_it(self):
+ rendering = self._callFUT('templates/hellomacro.jinja2')
+ self.assertEqual(rendering, u'\nHello delijati\n')
+
Index: repoze/bfg/jinja2/tests/templates/hellomacro.jinja2
===================================================================
--- repoze/bfg/jinja2/tests/templates/hellomacro.jinja2 (Revision 0)
+++ repoze/bfg/jinja2/tests/templates/hellomacro.jinja2 (Revision 0)
@@ -0,0 +1,3 @@
+{% import 'hellomacro.macro_jinja2' as macro %}
+{{ macro.foo('delijati') }}
+
Index: repoze/bfg/jinja2/tests/templates/hellomacro.macro_jinja2
===================================================================
--- repoze/bfg/jinja2/tests/templates/hellomacro.macro_jinja2 (Revision 0)
+++ repoze/bfg/jinja2/tests/templates/hellomacro.macro_jinja2 (Revision 0)
@@ -0,0 +1,5 @@
+{% macro foo(name) -%}
+ Hello {{ name }}
+{%- endmacro %}
+
+
Index: repoze/bfg/jinja2/bindings.py
===================================================================
--- repoze/bfg/jinja2/bindings.py (Revision 6447)
+++ repoze/bfg/jinja2/bindings.py (Arbeitskopie)
@@ -8,7 +8,8 @@
from repoze.bfg.path import caller_path
from jinja2.loaders import FunctionLoader
-from jinja2 import Environment
+from jinja2 import Environment, ChoiceLoader, FileSystemLoader
+import os
def _auto_reload():
settings = queryUtility(ISettings)
@@ -34,18 +35,24 @@
Extends jinja2.loaders.FunctionLoader with configurable auto-reloading.
"""
auto_reload = None
+
def get_source(self, environment, template):
if self.auto_reload is None:
self.auto_reload = _auto_reload()
environment.auto_reload = self.auto_reload
return super(BfgLoader, self).get_source(environment, template)
-
-env = Environment(loader=BfgLoader(load_template))
+
+loader_array = []
+loader_array.append(BfgLoader(load_template))
+
+env = Environment(loader=ChoiceLoader(loader_array))
+
def get_template(path):
""" Return a z3c.pt template object at the package-relative path
(may also be absolute) """
path = caller_path(path)
+ env.loader.loaders.append(FileSystemLoader(os.path.dirname(path)))
return env.get_template(path)
def render_template(path, **kw):
Index: CHANGES.txt
===================================================================
--- CHANGES.txt (Revision 6447)
+++ CHANGES.txt (Arbeitskopie)
@@ -3,7 +3,7 @@
Next release
------------
-
+- added macro support, now it also add the template folder
- Respect ``reload_templates`` option in BFG.
0.3 (2009-05-03)
_______________________________________________
Repoze-dev mailing list
Repoze-dev@lists.repoze.org
http://lists.repoze.org/listinfo/repoze-dev