mirror of https://github.com/jumpserver/jumpserver
48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
import logging
|
|
import os
|
|
|
|
from django.conf import settings
|
|
from django.template import Context
|
|
from django.template import Engine, TemplateSyntaxError
|
|
from django.template.loader import render_to_string
|
|
from django.utils._os import safe_join
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def safe_render_to_string(template_name, context=None, request=None, using=None):
|
|
with open(template_name, encoding="utf-8") as f:
|
|
template_code = f.read()
|
|
safe_engine = Engine(
|
|
debug=False,
|
|
libraries={}, # 禁用自定义 tag 库
|
|
builtins=[], # 不自动加载内置标签
|
|
)
|
|
try:
|
|
template = safe_engine.from_string(template_code)
|
|
except TemplateSyntaxError as e:
|
|
logger.error(e)
|
|
return template_code
|
|
return template.render(Context(context or {}))
|
|
|
|
|
|
def _get_data_template_path(template_name: str):
|
|
# 保存到 data/template/<原路径>.html
|
|
# 例如 template_name users/_msg_x.html -> data/template/users/_msg_x.html
|
|
rel_path = template_name.replace('/', os.sep)
|
|
return safe_join(settings.DATA_DIR, 'template', rel_path)
|
|
|
|
|
|
def _get_edit_template_path(template_name: str):
|
|
return _get_data_template_path(template_name) + '.edit'
|
|
|
|
|
|
def custom_render_to_string(template_name, context=None, request=None, using=None):
|
|
# 如果自定的义模板存在,则使用自定义模板,否则使用系统模板
|
|
custom_template = _get_data_template_path(template_name)
|
|
if os.path.exists(custom_template):
|
|
template = safe_render_to_string(custom_template, context=context, request=request, using=using)
|
|
else:
|
|
template = render_to_string(template_name, context=context, request=request, using=using)
|
|
return template
|