python-hserver/hserver/templates/DPage.py

71 lines
1.5 KiB
Python

from hserver.api.WebObject import WebObject
from hserver.api.WebCallable import WebCallable
from hserver.types.FormApplyable import FormApplyable
from hserver.templates import Template
from objectbroker import Persistence
import hserver
import os
import os.path
from simplelog import log
class DPage(WebObject,Persistence,FormApplyable):
NOPERSIST = ("_DPage__template")
FA_Names = { "source" : "source" }
_hm_edit = Template( base = os.path.dirname( __file__ ), template = "dpage.edit.html" )
def __init__(self, source = None):
WebObject.__init__(self)
self.__template = None
if source is None:
self.__source = """<!DOCTYPE html>
<html>
<head>
<title><%=self.title%></title>
</head>
<body>
<%=self.title%>
</body>
</html>"""
else:
self.__source = source
def source(self, value = None):
if not value is None:
self.__source = value
self.__template = None
return self.__source
def __call__(self,request,o = None):
return self.template()(request, o = o )
def provide(self, name):
tmpl = getattr(self, name)
if (isinstance(tmpl, DPage)):
return tmpl.template()
return None
def template(self):
if (self.__template is None):
self.__template = Template( source = self.__source, provider = self )
return self.__template
def _preview(self,request, o = None):
if "content" in request.getForm():
source = request.getForm()["content"].value()
tmpl = Template( source = source, provider = self )
tmpl(request, o = self)
preview = WebCallable( method = _preview )