~loggerhead-team/loggerhead/trunk-rich

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""
By VladDrac@irc.freenode.net/#turbogears
+ Some small modifications
"""

from zope.pagetemplate import pagetemplatefile
import os.path
import sys

class Here(object):
    def __init__(self, base, options):
        self.base = base
        self.options = options

    def __getattribute__(self, name):
        # import pdb; pdb.set_trace()
        if name.startswith('_'):
            return super(Here, self).__getattribute__(name)
        tpl = PageTemplate(os.path.join(self.__dict__['base'], name))
        tpl.add_context(object.__getattribute__(self, 'options'))
        return tpl

class PageTemplate(pagetemplatefile.PageTemplateFile):
    def __init__(self, name):
    	base = os.path.dirname(sys._getframe(1).f_globals["__file__"])
	self.extra_context = {}
        self.name = name
        self.fullpath = os.path.join(base, self.name)
        self.base = os.path.dirname(self.fullpath)
        pagetemplatefile.PageTemplateFile.__init__(self, self.fullpath)
    
    def render(self, extra_dict=None):
	if extra_dict:
    	    context = self.pt_getContext()
	    context.update(extra_dict)
	return self.pt_render(context)
    
    def add_context(self, d):
	self.extra_context.update(d)
	
    def pt_getContext(self, args=(), options={}, **ignored):
        rval = pagetemplatefile.PageTemplateFile.pt_getContext(self, args, options, **ignored)
	rval.update(options)
	rval.update(self.extra_context)
        rval.update({'here':Here(self.base, options), 'template':self})
        return rval