def render_template(self, name_or_statement, context=None, by_name=False):
if by_name:
if name_or_statement not in self._templates:
raise ValueError("No such template of name: '{}'.".format(name_or_statement))
statement = self._templates[name_or_statement]
else:
statement = name_or_statement
try:
from sqlalchemy.sql.base import Executable
if isinstance(statement, Executable):
statement = str(statement.compile(compile_kwargs={"literal_binds": True}))
except ImportError:
pass
if context is None or context is False:
context = {}
template_context = {}
template_context.update(self._template_context) # default context
template_context.update(context) # context passed in
intersection = set(self._template_context.keys()) & set(context.keys())
if intersection:
logger.warning(
"The following default template context keys have been overridden "
"by the local context: {}."
.format(intersection)
)
# Substitute in any other named statements recursively
while '{{{' in statement or '{{%' in statement:
statement = Template(statement,
block_start_string='{{%',
block_end_string='%}}',
variable_start_string='{{{',
variable_end_string='}}}',
comment_start_string='{{#',
comment_end_string='#}}',
undefined=StrictUndefined).render(getattr(self, '_templates', {}))
return Template(statement, undefined=StrictUndefined).render(template_context)
评论列表
文章目录