[Checkins] SVN: grok/trunk/src/grok/ Fix bug: grok.name only
affects name of the view, not the name of the associated template.
Philipp von Weitershausen
philikon at philikon.de
Sun Oct 15 13:51:42 EDT 2006
Log message for revision 70663:
Fix bug: grok.name only affects name of the view, not the name of the associated template.
Implement grok.template which lets you associate a different template with a view than
the default.
Changed:
U grok/trunk/src/grok/__init__.py
U grok/trunk/src/grok/_grok.py
U grok/trunk/src/grok/tests/view/inline.py
A grok/trunk/src/grok/tests/view/template.py
-=-
Modified: grok/trunk/src/grok/__init__.py
===================================================================
--- grok/trunk/src/grok/__init__.py 2006-10-15 17:17:09 UTC (rev 70662)
+++ grok/trunk/src/grok/__init__.py 2006-10-15 17:51:41 UTC (rev 70663)
@@ -15,4 +15,5 @@
"""
from zope.interface import implements
-from _grok import Model, Adapter, View, PageTemplate, grok, context, name
+from _grok import (Model, Adapter, View, PageTemplate,
+ grok, context, name, template)
Modified: grok/trunk/src/grok/_grok.py
===================================================================
--- grok/trunk/src/grok/_grok.py 2006-10-15 17:17:09 UTC (rev 70662)
+++ grok/trunk/src/grok/_grok.py 2006-10-15 17:51:41 UTC (rev 70663)
@@ -100,23 +100,24 @@
for factory in views:
view_context = determine_context(factory, context)
- name = factory.__name__.lower()
- name = getattr(factory, '__grok_name__', name)
+ factory_name = factory.__name__.lower()
# find inline templates
- template = templates.get(name)
+ template_name = getattr(factory, '__grok_template__', factory_name)
+ template = templates.get(template_name)
if template:
- templates.markAssociated(name)
+ templates.markAssociated(template_name)
factory.template = template
else:
if not getattr(factory, 'render', None):
raise GrokError("View %r has no associated template or "
"'render' method." % factory)
+ view_name = getattr(factory, '__grok_name__', factory_name)
component.provideAdapter(factory,
adapts=(view_context, IDefaultBrowserLayer),
provides=interface.Interface,
- name=name)
+ name=view_name)
for name, unassociated in templates.listUnassociatedTemplates():
source = '<%s template in %s>' % (name, dotted_name)
@@ -218,9 +219,24 @@
set_local('context', obj, "grok.context can only be called once per class "
"or module.")
-def name(name):
- if not_unicode_or_ascii(name):
- raise GrokError("You can only pass unicode or ASCII to grok.name.")
- if not caller_is_class():
- raise GrokError("grok.name can only be used on class level.")
- set_local('name', name, "grok.name can only be called once per class.")
+class ClassDirective(object):
+ """
+ Class-level directive that puts unicode/ASCII values into the
+ class's locals as __grok_<name>__.
+ """
+
+ def __init__(self, name):
+ self.name = name
+
+ def __call__(self, val):
+ if not_unicode_or_ascii(val):
+ raise GrokError("You can only pass unicode or ASCII to "
+ "grok.%s." % self.name)
+ if not caller_is_class():
+ raise GrokError("grok.%s can only be used on class level."
+ % self.name)
+ set_local(self.name, val, "grok.%s can only be called once per class."
+ % self.name)
+
+name = ClassDirective('name')
+template = ClassDirective('template')
Modified: grok/trunk/src/grok/tests/view/inline.py
===================================================================
--- grok/trunk/src/grok/tests/view/inline.py 2006-10-15 17:17:09 UTC (rev 70662)
+++ grok/trunk/src/grok/tests/view/inline.py 2006-10-15 17:51:41 UTC (rev 70663)
@@ -33,6 +33,13 @@
>>> print view()
<html><body><h1>GROK CLUB MAMMOTH!</h1></body></html>
+Finding a template does not depend on the view name, but on the class
+name:
+
+ >>> view = component.getMultiAdapter((manfred, request), name='hunting')
+ >>> print view()
+ <html><body><h1>GROK HUNT MAMMOTH!</h1></body></html>
+
"""
import grok
@@ -59,3 +66,11 @@
club = grok.PageTemplate("""\
<html><body><h1>GROK CLUB MAMMOTH!</h1></body></html>
""")
+
+class Hunt(grok.View):
+ grok.name('hunting')
+
+hunt = grok.PageTemplate("""\
+<html><body><h1>GROK HUNT MAMMOTH!</h1></body></html>
+""")
+
Added: grok/trunk/src/grok/tests/view/template.py
===================================================================
--- grok/trunk/src/grok/tests/view/template.py 2006-10-15 17:17:09 UTC (rev 70662)
+++ grok/trunk/src/grok/tests/view/template.py 2006-10-15 17:51:41 UTC (rev 70663)
@@ -0,0 +1,27 @@
+"""
+
+ >>> grok.grok(__name__)
+
+View with an associated PageTemplate that is referred to using
+``grok.template``:
+
+ >>> manfred = Mammoth()
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> from zope import component
+ >>> view = component.getMultiAdapter((manfred, request), name='painting')
+ >>> print view()
+ <html><body><h1>GROK PAINT MAMMOTH!</h1></body></html>
+
+"""
+import grok
+
+class Mammoth(grok.Model):
+ pass
+
+class Painting(grok.View):
+ grok.template('cavepainting')
+
+cavepainting = grok.PageTemplate("""\
+<html><body><h1>GROK PAINT MAMMOTH!</h1></body></html>
+""")
Property changes on: grok/trunk/src/grok/tests/view/template.py
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the Checkins
mailing list