1
0

feat: 增强模板条件渲染表达式支持

使用 simpleeval 库替换原有的简单正则匹配,支持复杂的条件表达式评估。新增 ConditionEvaluator 类处理条件逻辑,支持比较运算、逻辑运算、成员测试、数学计算和内置函数,同时保持向后兼容性。
This commit is contained in:
2026-03-03 17:28:23 +08:00
parent 01a93ce13b
commit 16ca9d77cd
16 changed files with 1437 additions and 31 deletions

View File

@@ -7,6 +7,7 @@
import re
from pathlib import Path
from loaders.yaml_loader import YAMLError, load_yaml_file, validate_template_yaml
from core.condition_evaluator import ConditionEvaluator
class Template:
@@ -20,6 +21,9 @@ class Template:
template_file: 模板名称(纯文件名,不含路径)
templates_dir: 模板文件目录
"""
# 初始化条件评估器
self._condition_evaluator = ConditionEvaluator()
# 检查是否提供了 templates_dir
if templates_dir is None:
raise YAMLError(
@@ -71,15 +75,18 @@ class Template:
"""
obj = cls.__new__(cls)
obj.data = template_data
# 初始化条件评估器
obj._condition_evaluator = ConditionEvaluator()
# 解析变量定义
obj.vars_def = {}
for var in template_data.get('vars', []):
obj.vars_def[var['name']] = var
# 元素列表
obj.elements = template_data.get('elements', [])
return obj
def _external_template_exists(self, template_name):
@@ -153,27 +160,17 @@ class Template:
def evaluate_condition(self, condition, vars_values):
"""
评估条件表达式(简单的存在性检查)
评估条件表达式
Args:
condition: 条件字符串,如 "{subtitle != ''}"
condition: 条件字符串,如 "{count > 0 and status == 'active'}"
vars_values: 变量值字典
Returns:
bool: 条件是否满足
"""
# 简单实现:检查变量是否非空
# 匹配 {var_name != ''} 或 {var_name != ""}
pattern = r'\{(\w+)\s*!=\s*[\'\"]{2}\}'
match = re.match(pattern, condition)
if match:
var_name = match.group(1)
value = vars_values.get(var_name, '')
return value != ''
# 默认返回 True
return True
# 委托给条件评估器
return self._condition_evaluator.evaluate_condition(condition, vars_values)
def render(self, vars_values):
"""