[Checkins] SVN: megrok.jinja/trunk/src/megrok/jinja/ A new extension it's added: `ContentProviderExtension`. Now, it's possible to use {{ provider('manager') }}
Santiago Videla
santiago.videla at gmail.com
Mon Apr 6 23:31:57 EDT 2009
Log message for revision 98960:
A new extension it's added: `ContentProviderExtension`. Now, it's possible to use {{ provider('manager') }}
This is equivalent to <tal:block content="structure provider:manager" /> in zpt
Changed:
U megrok.jinja/trunk/src/megrok/jinja/extensions.py
U megrok.jinja/trunk/src/megrok/jinja/factory.py
A megrok.jinja/trunk/src/megrok/jinja/ftests/providers/
A megrok.jinja/trunk/src/megrok/jinja/ftests/providers/__init__.py
A megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers.py
A megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers_templates/
A megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers_templates/usingviewlets.jinja
A megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers_templates/viewlet.jinja
U megrok.jinja/trunk/src/megrok/jinja/ftests/test_functional.py
-=-
Modified: megrok.jinja/trunk/src/megrok/jinja/extensions.py
===================================================================
--- megrok.jinja/trunk/src/megrok/jinja/extensions.py 2009-04-07 02:22:24 UTC (rev 98959)
+++ megrok.jinja/trunk/src/megrok/jinja/extensions.py 2009-04-07 03:31:56 UTC (rev 98960)
@@ -15,8 +15,9 @@
from jinja2 import nodes
from jinja2.ext import Extension, InternationalizationExtension
from jinja2.utils import contextfunction
-from zope.component import getUtility
+from zope.component import getUtility, getMultiAdapter
from zope.i18n.interfaces import ITranslationDomain, IUserPreferredLanguages
+from zope.contentprovider.interfaces import IContentProvider
from zope.cachedescriptors import method
class DomainNotDefined(Exception):
@@ -102,3 +103,25 @@
if variables:
node = nodes.Mod(node, variables)
return nodes.Output([node])
+
+class ContentProviderExtension(Extension):
+ """
+ Jinja2 extension to support the use of viewlets (content
+ providers).
+
+ It doesn't define any `tag`, just set the `provider` name function
+ in the `Environment.globals`
+ """
+ def __init__(self, environment):
+ Extension.__init__(self, environment)
+ environment.globals['provider'] = self._get_content_provider
+
+ @contextfunction
+ def _get_content_provider(self, context, name):
+ view = context.resolve('view')
+
+ provider = getMultiAdapter((view.context, view.request, view),
+ IContentProvider,
+ name=name)
+ provider.update()
+ return provider.render()
Modified: megrok.jinja/trunk/src/megrok/jinja/factory.py
===================================================================
--- megrok.jinja/trunk/src/megrok/jinja/factory.py 2009-04-07 02:22:24 UTC (rev 98959)
+++ megrok.jinja/trunk/src/megrok/jinja/factory.py 2009-04-07 03:31:56 UTC (rev 98960)
@@ -19,14 +19,14 @@
from grokcore.view.components import GrokTemplate
from grokcore.view.interfaces import ITemplate, ITemplateFileFactory
-from extensions import i18nExtension
+from extensions import i18nExtension, ContentProviderExtension
# Create an Environment instance with the i18n extension
# and the FileSystemLoader class loader that will look for
# absolute path templates.
# By default, auto_reload = True, for production system
# should be set to False for higher performance
-env = Environment(extensions=[i18nExtension],
+env = Environment(extensions=[i18nExtension, ContentProviderExtension],
loader=FileSystemLoader('/'))
env.install_gettext_translations()
Added: megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers.py
===================================================================
--- megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers.py (rev 0)
+++ megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers.py 2009-04-07 03:31:56 UTC (rev 98960)
@@ -0,0 +1,37 @@
+"""
+ >>> from zope.publisher.browser import TestRequest
+ >>> from zope.component import getMultiAdapter
+ >>> context = Context()
+ >>> request = TestRequest()
+
+Let's test the viewlets support in Jinja2 templates.
+Instead of <tal:block content="structure provider:manager" />
+we use: {{ provider('manager')}} ::
+
+ >>> view = getMultiAdapter((context, request), name='usingviewlets')
+ >>> print view()
+ Testing megrok.jinja with viewlets support
+ From the view: A view variable
+ From the viewlet: A viewlet variable
+"""
+
+import grok
+
+class Context(grok.Context):
+ pass
+
+class UsingViewlets(grok.View):
+ def update(self):
+ self.something = 'A view variable'
+
+class ViewletMgr(grok.ViewletManager):
+ grok.context(Context)
+ grok.name('manager')
+
+class Viewlet(grok.Viewlet):
+ grok.context(Context)
+ grok.viewletmanager(ViewletMgr)
+
+ def update(self):
+ self.another = 'A viewlet variable'
+
Added: megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers_templates/usingviewlets.jinja
===================================================================
--- megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers_templates/usingviewlets.jinja (rev 0)
+++ megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers_templates/usingviewlets.jinja 2009-04-07 03:31:56 UTC (rev 98960)
@@ -0,0 +1 @@
+{{ provider('manager') }}
\ No newline at end of file
Added: megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers_templates/viewlet.jinja
===================================================================
--- megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers_templates/viewlet.jinja (rev 0)
+++ megrok.jinja/trunk/src/megrok/jinja/ftests/providers/test_providers_templates/viewlet.jinja 2009-04-07 03:31:56 UTC (rev 98960)
@@ -0,0 +1,3 @@
+Testing megrok.jinja with viewlets support
+From the view: {{ view.something }}
+From the viewlet: {{ viewlet.another }}
\ No newline at end of file
Modified: megrok.jinja/trunk/src/megrok/jinja/ftests/test_functional.py
===================================================================
--- megrok.jinja/trunk/src/megrok/jinja/ftests/test_functional.py 2009-04-07 02:22:24 UTC (rev 98959)
+++ megrok.jinja/trunk/src/megrok/jinja/ftests/test_functional.py 2009-04-07 03:31:56 UTC (rev 98960)
@@ -83,7 +83,7 @@
def test_suite():
suite = unittest.TestSuite()
- for name in ['module_directory', 'inline', 'i18n']:
+ for name in ['module_directory', 'inline', 'i18n', 'providers']:
suite.addTest(suiteFromPackage(name))
return suite
More information about the Checkins
mailing list