Skip to content

kajiki import path #121

@alexbodn

Description

@alexbodn

hello friends,
and a big thank for toscawidgets2?.
i'm porting an older turbogears 2.1.5 app to html5/kajiki, thus tw2 was needed for widgets.
since widgets and regular templates share a few kajiki modules, py:import was needed in tw2 kajiki too.
here is a patch that will get used when invoked from an app that maintains a path for modules and the middleware. turbogears will be patched too.
please commit.

diff --git a/tw2/core/middleware.py b/tw2/core/middleware.py
index 41b1391..bb8b623 100644
--- a/tw2/core/middleware.py
+++ b/tw2/core/middleware.py
@@ -120,7 +120,7 @@ class Config(object):
         'genshi': ['genshi', 'html'],
         'genshi_abs': ['genshi', 'html'], # just for backwards compatibility with tw2 2.0.0
         'jinja':['jinja', 'html'],
-        'kajiki':['kajiki', 'html'],
+        'kajiki':['kajiki', 'html', 'xhtml'],
         'chameleon': ['pt']
     }
     script_name = ''
diff --git a/tw2/core/templating.py b/tw2/core/templating.py
index f6e9c6f..eead876 100644
--- a/tw2/core/templating.py
+++ b/tw2/core/templating.py
@@ -20,7 +20,7 @@ _default_rendering_extension_lookup = {
     'genshi_abs': ['genshi', 'html'],
     'jinja': ['jinja', 'html'],
     'chameleon': ['pt'],
-    'kajiki': ['kajiki', 'html'],
+    'kajiki': ['kajiki', 'html', 'xhtml'],
 }


@@ -122,7 +122,7 @@ def get_source(engine_name, template, inline=False, mw=None):


 @memoize
-def get_render_callable(engine_name, displays_on, src, filename=None, inline=False):
+def get_render_callable(engine_name, displays_on, src, filename=None, inline=False, mw=None):
     """ Returns a function that takes a template source and kwargs. """

     # See the discussion here re: `displays_on` -- http://bit.ly/JRqbRw
@@ -175,8 +175,19 @@ def get_render_callable(engine_name, displays_on, src, filename=None, inline=Fal

     elif engine_name == 'kajiki':
         import kajiki
-        tmpl = kajiki.XMLTemplate(six.u(src), filename=filename,
-                                  cdata_scripts=False)
+        path = getattr(mw.config, 'paths_templates', '') if mw else None
+        if path and not getattr(mw.config, 'kajiki_loader', None):
+            mw.config.kajiki_loader = kajiki.loader.FileLoader(
+                path=path, 
+                reload=getattr(mw.config, 'auto_reload_templates', None),
+                force_mode='xhtml5', 
+                )
+        if path and getattr(mw.config, 'kajiki_loader', None):
+            tmpl = mw.config.kajiki_loader.load(filename, is_fragment=True)
+        else:
+            tmpl = kajiki.XMLTemplate(six.u(src), filename=filename, 
+                                      is_fragment=True, cdata_scripts=False)
+
         return lambda kwargs: Markup(tmpl(kwargs).render())

     elif engine_name == 'chameleon':
@@ -208,7 +219,7 @@ def render(template_name, displays_on, kwargs, inline=False, mw=None):

     # Establish the render function
     callback = get_render_callable(
-        engine_name, displays_on, source, template_name, inline)
+        engine_name, displays_on, source, template_name, inline, mw)

     # Do it

thanks in advance,
alex

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions