diff --git a/frappe/utils/jinja.py b/frappe/utils/jinja.py index dd0a1c95e0..6be55d7fcb 100644 --- a/frappe/utils/jinja.py +++ b/frappe/utils/jinja.py @@ -77,20 +77,20 @@ def render_template(template, context=None, is_path=None, safe_render=True): :param is_path: (optional) assert that the `template` parameter is a path :param safe_render: (optional) prevent server side scripting via jinja templating """ + if not template: + return "" from jinja2 import TemplateError from jinja2.sandbox import SandboxedEnvironment from frappe import _, get_traceback, throw - if not template: - return "" - if context is None: context = {} jenv: SandboxedEnvironment = get_jenv() if is_path or guess_is_path(template): + is_path = True compiled_template = jenv.get_template(template) else: if safe_render and ".__" in template: @@ -105,12 +105,23 @@ def render_template(template, context=None, is_path=None, safe_render=True): msg=f"
{template}
{html.escape(get_traceback())}
", ) + import time + + from frappe.utils.logger import get_logger + + logger = get_logger("render-template") try: + start_time = time.monotonic() return compiled_template.render(context) except Exception as e: import html throw(title="Context Error", msg=f"
{html.escape(get_traceback())}
", exc=e) + finally: + if is_path: + logger.debug(f"Rendering time: {time.monotonic() - start_time:.6f} seconds ({template})") + else: + logger.debug(f"Rendering time: {time.monotonic() - start_time:.6f} seconds") def guess_is_path(template):