#!/usr/bin/env python """ return a dynamic page from website templates all html pages except login-page.html get generated here """ import cgi, cgitb, os, sys cgitb.enable() # import libs sys.path.append('..') import conf sys.path.append('../lib/py') sys.path.append(conf.modules_path) def init(): import webnotes webnotes.form = cgi.FieldStorage(keep_blank_values=True) for key in webnotes.form.keys(): webnotes.form_dict[key] = webnotes.form.getvalue(key) webnotes.connect() def respond(): html = get_html() print "Content-Type: text/html" print print html.encode('utf-8') def get_html(): import webnotes from webnotes.model.doc import Document # Get web page outer_env_dict = get_outer_env() try: if 'page' in webnotes.form_dict: page_name = webnotes.form_dict['page'] if page_name.endswith('.html'): page_name = page_name[:-5] if page_name.startswith('blog'): raise Exception #page_name = else: page_name = get_web_page_name(page_name) else: from webnotes.cms import get_home_page page_name = get_home_page('Guest') page = Document('Web Page', page_name) page.fields.update(outer_env_dict) return build_html(page.fields, "page: %s" % page_name) except Exception, e: return build_html(outer_env_dict, "error: %s" % webnotes.getTraceback(), '404.html') def get_outer_env(): """env dict for outer template""" import webnotes return { 'top_bar_items': webnotes.conn.sql("""select * from `tabTop Bar Item` where parent='Website Settings' and parentfield='top_bar_items' order by idx asc""", as_dict=1), 'footer_items': webnotes.conn.sql("""select * from `tabTop Bar Item` where parent='Website Settings' and parentfield='footer_items' order by idx asc""", as_dict=1), 'brand': webnotes.conn.get_value('Website Settings', None, 'brand_html'), 'copyright': webnotes.conn.get_value('Website Settings', None, 'copyright'), } def build_html(args, comments, template='page.html'): """build html using jinja2 templates""" from webnotes.utils import cstr from jinja2 import Environment, FileSystemLoader jenv = Environment(loader = FileSystemLoader('../erpnext/website/templates')) html = jenv.get_template(template).render(args) html += "\n" % cstr(comments) return html def get_web_page_name(page_name): """get page by shortname""" import webnotes return webnotes.conn.sql("""select name from `tabWeb Page` where page_name=%s""", page_name)[0][0] if __name__=="__main__": init() respond()