diff --git a/hyde/ext/templates/jinja.py b/hyde/ext/templates/jinja.py index f5028c8..29a21eb 100644 --- a/hyde/ext/templates/jinja.py +++ b/hyde/ext/templates/jinja.py @@ -10,6 +10,7 @@ from hyde.fs import File, Folder from hyde.model import Expando from hyde.template import HtmlWrap, Template from hyde.util import getLoggerWithNullHandler +from operator import attrgetter from jinja2 import contextfunction, Environment from jinja2 import FileSystemLoader, FileSystemBytecodeCache @@ -499,21 +500,56 @@ class Jinja2Template(Template): if hasattr(engine, 'preprocessor') else None) self.loader = HydeLoader(self.sitepath, site, self.preprocessor) - self.env = Environment(loader=self.loader, - undefined=SilentUndefined, - line_statement_prefix='---', - trim_blocks=True, - bytecode_cache=FileSystemBytecodeCache(), - extensions=[IncludeText, - Spaceless, - Markdown, - Syntax, - Reference, - Refer, - YamlVar, - 'jinja2.ext.do', - 'jinja2.ext.loopcontrols', - 'jinja2.ext.with_']) + + default_extensions = [ + IncludeText, + Spaceless, + Markdown, + Syntax, + Reference, + Refer, + YamlVar, + 'jinja2.ext.do', + 'jinja2.ext.loopcontrols', + 'jinja2.ext.with_' + ] + + defaults = { + 'line_statement_prefix': '$$$', + 'trim_blocks': True, + } + + settings = dict() + settings.update(defaults) + settings['extensions'] = list() + settings['extensions'].extend(default_extensions) + + conf = {} + + try: + conf = attrgetter('config.jinja2')(site).to_dict() + print conf + except AttributeError: + pass + + settings.update( + dict([(key, conf[key]) for key in defaults if key in conf])) + + extensions = conf.get('extensions', []) + if isinstance(extensions, list): + settings['extensions'].extend(extensions) + else: + settings['extensions'].append(extensions) + + print settings + + self.env = Environment( + loader=self.loader, + undefined=SilentUndefined, + line_statement_prefix=settings['line_statement_prefix'], + trim_blocks=True, + bytecode_cache=FileSystemBytecodeCache(), + extensions=settings['extensions']) self.env.globals['media_url'] = media_url self.env.globals['content_url'] = content_url self.env.globals['engine'] = engine diff --git a/hyde/tests/test_jinja2template.py b/hyde/tests/test_jinja2template.py index 1bb2e84..822aab5 100644 --- a/hyde/tests/test_jinja2template.py +++ b/hyde/tests/test_jinja2template.py @@ -152,10 +152,10 @@ def test_markdown_with_extensions(): def test_line_statements(): source = """ - ---markdown + $$$ markdown ### Heading 3 - --- endmarkdown + $$$ endmarkdown """ t = Jinja2Template(JINJA2.path) s = Site(JINJA2.path) @@ -165,6 +165,28 @@ def test_line_statements(): html = t.render(source, {}).strip() assert html == u'