def select_template(self, names, parent=None, globals=None): """Works like :meth:`get_template` but tries a number of templates before it fails. If it cannot find any of the templates, it will raise a :exc:`TemplatesNotFound` exception. .. versionadded:: 2.3 .. versionchanged:: 2.4 If `names` contains a :class:`Template` object it is returned from the function unchanged. """ if not names: raise TemplatesNotFound( message=u'Tried to select from an empty list ' u'of templates.') globals = self.make_globals(globals) for name in names: if isinstance(name, Template): return name if parent is not None: name = self.join_path(name, parent) try: return self._load_template(name, globals) except TemplateNotFound: pass raise TemplatesNotFound(names)
def select_template(self, names, parent=None, globals=None): """Works like :meth:`get_template` but tries a number of templates before it fails. If it cannot find any of the templates, it will raise a :exc:`TemplatesNotFound` exception. .. versionchanged:: 2.11 If names is :class:`Undefined`, an :exc:`UndefinedError` is raised instead. If no templates were found and names contains :class:`Undefined`, the message is more helpful. .. versionchanged:: 2.4 If `names` contains a :class:`Template` object it is returned from the function unchanged. .. versionadded:: 2.3 """ if isinstance(names, Undefined): names._fail_with_undefined_error() if not names: raise TemplatesNotFound( message=u'Tried to select from an empty list ' u'of templates.') globals = self.make_globals(globals) for name in names: if isinstance(name, Template): return name if parent is not None: name = self.join_path(name, parent) try: return self._load_template(name, globals) except (TemplateNotFound, UndefinedError): pass raise TemplatesNotFound(names)
def render_snippet(*template_names: str, **kw: Any) -> str: ''' Helper function for rendering snippets. Rendered html has comment tags added to show the template used. NOTE: unlike other render functions this takes a list of keywords instead of a dict for the extra template variables. :param template_names: the template to render, optionally with fallback values, for when the template can't be found. For each, specify the relative path to the template inside the registered tpl_dir. :type template_names: str :param kw: extra template variables to supply to the template :type kw: named arguments of any type that are supported by the template ''' last_exc = None for template_name in template_names: try: output = render(template_name, extra_vars=kw) if config.get_value('debug'): output = ( '\n<!-- Snippet %s start -->\n%s\n<!-- Snippet %s end -->' '\n' % (template_name, output, template_name)) return h.literal(output) except TemplateNotFound as exc: if exc.name == template_name: # the specified template doesn't exist - try the next # fallback, but store the exception in case it was # last one last_exc = exc continue # a nested template doesn't exist - don't fallback raise exc else: raise last_exc or TemplatesNotFound(template_names)
def select_template(self, names, parent=None, globals=None): if not names: raise TemplatesNotFound( message=u'Tried to select from an empty list of templates.') globals = self.make_globals(globals) for name in names: if isinstance(name, Template): return name if parent is not None: name = self.join_path(name, parent) try: return self._load_template(name, globals) except TemplateNotFound: pass raise TemplatesNotFound(names)
def select_template(self, names, parent=None, globals=None, use_request_cache=True): """ Overridden to add the `use_request_cache` parameter. """ if not names: raise TemplatesNotFound(message='Tried to select from an empty list of templates.') globals = self.make_globals(globals) for name in names: if isinstance(name, Template): return name if parent is not None: name = self.join_path(name, parent) try: return self._load_template(name, globals, use_request_cache) except TemplateNotFound: pass raise TemplatesNotFound(names)