我应该如何访问对象实例中的 Cheetah Template() 变量占位符?

How should I access Cheetah Template() variable placeholders in an object instance?

我正在尝试设置一个对象实例,它将为 Cheetah3 文本模板引擎提供值。

这是我的文本模板脚本...

#filename: py_text_template.py

from traits.api import String, Range
from traits.api import HasTraits

from loguru import logger

from Cheetah.Template import Template

class Info(HasTraits):
    keyword_integer = Range(value=0, low=1, high=60)
    keyword_string = String(value="snack", regex=r"^\w+")

@logger.catch(onerror=lambda _: sys.exit(1))
def generate_text_template():
    myinfo = Info(keyword_integer=10, keyword_string="snack-attack")
    t = Template("On the first $myinfo.keyword_string, my true love")
    print(t)

generate_text_template()

我希望使用 Info() class 的 myinfo 实例来填充 Template,但出现以下错误...

Cheetah.NameMapper.NotFound: cannot find 'myinfo'

由于我还不明白的原因,Cheetah 不遵循访问对象实例属性和方法的正常约定。

为了解决这个问题,我不得不用 $keyword_string 替换 $myinfo.keyword_string 调用。然后我将 searchList=[myinfo] 添加到 Template() 调用中...

myinfo = Info(keyword_integer=10, keyword_string="snack-attack")
t = Template("On the first $keyword_string, my true love",
    searchList=[myinfo])

searchList 中的对象实例中搜索有问题的字典键、属性或方法。

完整的工作 Cheetah 脚本是:

#filename: py_text_template.py

from traits.api import String, Range
from traits.api import HasTraits

from loguru import logger

from Cheetah.Template import Template

class Info(HasTraits):
    keyword_integer = Range(value=0, low=1, high=60)
    keyword_string = String(value="snack", regex=r"^\w+")

@logger.catch(onerror=lambda _: sys.exit(1))
def generate_text_template():
    myinfo = Info(keyword_integer=10, keyword_string="snack-attack")
    t = Template("On the first $keyword_string, my true love",
                              # ^^^^^^^^^^^^^^
        searchList=[myinfo])  # <--- put myinfo instance here
    print(t)

generate_text_template()

运行 在 python3.7 下会产生预期的结果...

(py37_test) [mpenning@mudslide fixme]$ python py_text_template.py

On the first snack-attack, my true love
(py37_test) [mpenning@mudslide fixme]$

此脚本需要安装:

我正在使用:

  • Linux mudslide 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux
  • Python 3.7.0
  • 特性 6.3.2
  • 洛古鲁 0.5.3
  • 猎豹 3.2.6.post1