You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js lodash.template迁移至Python3如何支持占位符点号访问子属性?

方案1:使用Jinja2模板库(推荐)

Jinja2原生支持嵌套属性的点访问语法,同时支持自定义变量定界符,可以完美匹配你现有的${变量}格式模板,无需修改存量模板内容。

首先安装依赖:
pip install jinja2

使用示例:

from jinja2 import Environment, BaseLoader

# 配置模板环境,定界符匹配现有模板规则
template_env = Environment(
    loader=BaseLoader(),
    variable_start_string="${",
    variable_end_string="}",
    trim_blocks=True
)

def render(template: str, context: dict) -> str:
    tpl = template_env.from_string(template)
    return tpl.render(**context)

# 测试验证
result = render('${ foo.bar }, ${ baz }!', {"foo": {"bar": "Hello"}, "baz": "World"})
print(result)
# 输出:Hello, World!

该方案还兼容模板中的条件判断、循环等扩展逻辑,适合复杂模板场景使用。

方案2:纯内置库实现(无第三方依赖)

如果只有简单的变量替换需求,不想引入额外依赖,可以自己实现点路径解析+模板替换的逻辑,代码如下:

import re
from typing import Any, Dict

def resolve_path(context: Dict[str, Any], path: str) -> Any:
    # 处理占位符内的空格,拆分点路径
    keys = path.strip().split(".")
    current = context
    for key in keys:
        if isinstance(current, dict) and key in current:
            current = current[key]
        else:
            raise ValueError(f"无法解析占位符路径:{path}")
    return current

def render(template: str, context: Dict[str, Any]) -> str:
    # 匹配所有${...}格式的占位符
    placeholder_pattern = re.compile(r"\$\{([^}]+)\}")
    def replace_func(match: re.Match) -> str:
        path = match.group(1)
        return str(resolve_path(context, path))
    return placeholder_pattern.sub(replace_func, template)

# 测试验证
result = render('${ foo.bar }, ${ baz }!', {"foo": {"bar": "Hello"}, "baz": "World"})
print(result)
# 输出:Hello, World!

该方案轻量无依赖,适合仅需变量替换的简单场景。

内容的提问来源于stack exchange,提问作者Haotian Chyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:57:00