NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

httpJinja.py (1863B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\script\net\httpJinja.py
      2 import cherrypy
      3 import jinja2
      4 import blue
      5 import scriber
      6 from carbon.common.script.net.httpSettings import TEMPLATES_DIR
      7 scriber.init([blue.paths.ResolvePath('res:/scriber')])
      8 
      9 def CherryPyApp():
     10     return cherrypy.request.app
     11 
     12 
     13 def TemplateRender(template, **kwargs):
     14     context = {}
     15     context.update(kwargs)
     16     if cherrypy.request.app is not None:
     17         context.update({'request': cherrypy.request,
     18          'app_url': cherrypy.request.app.script_name})
     19     return scriber.scribe(template, **context)
     20 
     21 
     22 class JinjaHandler(cherrypy.dispatch.LateParamPageHandler):
     23 
     24     def __init__(self, env, template_name, next_handler):
     25         self.env = env
     26         self.template_name = template_name
     27         self.next_handler = next_handler
     28 
     29     def __call__(self):
     30         context = {}
     31         try:
     32             r = self.next_handler()
     33             context.update(r)
     34         except ValueError as e:
     35             cherrypy.log('%s (handler for "%s" returned "%s")' % (e, self.template_name, repr(r)), traceback=True)
     36 
     37         context.update({'request': cherrypy.request,
     38          'app_url': cherrypy.request.app.script_name})
     39         return scriber.scribe(self.template_name, **context)
     40 
     41 
     42 class JinjaLoader(object):
     43 
     44     def __init__(self):
     45         self.env = jinja2.Environment(loader=jinja2.FileSystemLoader(TEMPLATES_DIR))
     46 
     47     def __call__(self, template):
     48         cherrypy.request.handler = JinjaHandler(self.env, template, cherrypy.request.handler)
     49 
     50     def add_filter(self, func):
     51         self.env.filters[func.__name__] = func
     52         return func
     53 
     54     def add_global(self, func):
     55         self.env.globals[func.__name__] = func
     56         return func
     57 
     58 
     59 loader = JinjaLoader()
     60 cherrypy.tools.jinja = cherrypy.Tool('before_handler', loader, priority=70)