我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用tornado.template()。
def __init__(self, application, request, **kwargs): super(RequestHandler, self).__init__() self.application = application self.request = request self._headers_written = False self._finished = False self._auto_finish = True self._transforms = None # will be set in _execute self._prepared_future = None self.path_args = None self.path_kwargs = None self.ui = ObjectDict((n, self._ui_method(m)) for n, m in application.ui_methods.items()) # UIModules are available as both `modules` and `_tt_modules` in the # template namespace. Historically only `modules` was available # but could be clobbered by user additions to the namespace. # The template {% module %} directive looks in `_tt_modules` to avoid # possible conflicts. self.ui["_tt_modules"] = _UIModuleNamespace(self, application.ui_modules) self.ui["modules"] = self.ui["_tt_modules"] self.clear() self.request.connection.set_close_callback(self.on_connection_close) self.initialize(**kwargs)
def render_string(self, template_name, **kwargs): """Generate the given template with the given arguments. We return the generated byte string (in utf8). To generate and write a template as a response, use render() above. """ # If no template_path is specified, use the path of the calling file template_path = self.get_template_path() if not template_path: frame = sys._getframe(0) web_file = frame.f_code.co_filename while frame.f_code.co_filename == web_file: frame = frame.f_back template_path = os.path.dirname(frame.f_code.co_filename) with RequestHandler._template_loader_lock: if template_path not in RequestHandler._template_loaders: loader = self.create_template_loader(template_path) RequestHandler._template_loaders[template_path] = loader else: loader = RequestHandler._template_loaders[template_path] t = loader.load(template_name) namespace = self.get_template_namespace() namespace.update(kwargs) return t.generate(**namespace)
def get_template_namespace(self): """Returns a dictionary to be used as the default template namespace. May be overridden by subclasses to add or modify values. The results of this method will be combined with additional defaults in the `tornado.template` module and keyword arguments to `render` or `render_string`. """ namespace = dict( handler=self, request=self.request, current_user=self.current_user, locale=self.locale, _=self.locale.translate, pgettext=self.locale.pgettext, static_url=self.static_url, xsrf_form_html=self.xsrf_form_html, reverse_url=self.reverse_url ) namespace.update(self.ui) return namespace
def create_template_loader(self, template_path): """Returns a new template loader for the given path. May be overridden by subclasses. By default returns a directory-based loader on the given path, using the ``autoescape`` and ``template_whitespace`` application settings. If a ``template_loader`` application setting is supplied, uses that instead. """ settings = self.application.settings if "template_loader" in settings: return settings["template_loader"] kwargs = {} if "autoescape" in settings: # autoescape=None means "no escaping", so we have to be sure # to only pass this kwarg if the user asked for it. kwargs["autoescape"] = settings["autoescape"] if "template_whitespace" in settings: kwargs["whitespace"] = settings["template_whitespace"] return template.Loader(template_path, **kwargs)
def reflect(engine): template = request.values.get('tpl') if not template: template = '%s' injection = request.values.get('inj') if engine == 'mako': return randomword() + MakoTemplates(template % injection, lookup=mylookup).render() + randomword() elif engine == 'jinja2': return randomword() + Jinja2Env.from_string(template % injection).render() + randomword() elif engine == 'eval': return randomword() + str(eval(template % injection)) + randomword() elif engine == 'tornado': return randomword() + tornado.template.Template(template % injection).generate() + randomword()
def blind(engine): template = request.values.get('tpl') if not template: template = '%s' injection = request.values.get('inj') if engine == 'mako': MakoTemplates(template % injection, lookup=mylookup).render() elif engine == 'jinja2': Jinja2Env.from_string(template % injection).render() elif engine == 'eval': eval(template % injection) elif engine == 'tornado': tornado.template.Template(template % injection).generate() return randomword()
def reflect_cookieauth(engine): if not request.cookies.get('SID') == 'SECRET': return randomword() template = request.values.get('tpl') if not template: template = '%s' injection = request.values.get('inj') if engine == 'mako': return randomword() + MakoTemplates(template % injection, lookup=mylookup).render() + randomword() elif engine == 'jinja2': return randomword() + Jinja2Env.from_string(template % injection).render() + randomword() elif engine == 'eval': return randomword() + str(eval(template % injection)) + randomword() elif engine == 'tornado': return randomword() + tornado.template.Template(template % injection).generate() + randomword()
def generate(func, renderer, args, kwargs): """ Wrap the ``generate`` method used in templates rendering. Because the method may be called everywhere, the execution is traced in a tracer StackContext that inherits the current one if it's already available. """ # get the module pin pin = Pin.get_from(template) if not pin or not pin.enabled(): return func(*args, **kwargs) # change the resource and the template name # if it's created from a string instead of a file if '<string>' in renderer.name: resource = template_name = 'render_string' else: resource = template_name = renderer.name # trace the original call with pin.tracer.trace('tornado.template', service=pin.service) as span: span.span_type = http.TEMPLATE span.resource = resource span.set_meta('tornado.template_name', template_name) return func(*args, **kwargs)
def get_template_namespace(self): """Returns a dictionary to be used as the default template namespace. May be overridden by subclasses to add or modify values. The results of this method will be combined with additional defaults in the `tornado.template` module and keyword arguments to `render` or `render_string`. """ namespace = dict( handler=self, request=self.request, current_user=self.current_user, locale=self.locale, _=self.locale.translate, static_url=self.static_url, xsrf_form_html=self.xsrf_form_html, reverse_url=self.reverse_url ) namespace.update(self.ui) return namespace
def create_template_loader(self, template_path): """Returns a new template loader for the given path. May be overridden by subclasses. By default returns a directory-based loader on the given path, using the ``autoescape`` application setting. If a ``template_loader`` application setting is supplied, uses that instead. """ settings = self.application.settings if "template_loader" in settings: return settings["template_loader"] kwargs = {} if "autoescape" in settings: # autoescape=None means "no escaping", so we have to be sure # to only pass this kwarg if the user asked for it. kwargs["autoescape"] = settings["autoescape"] return template.Loader(template_path, **kwargs)