2

我正在尝试设置一个对象实例,该实例将为 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()

我希望使用该类的myinfo实例Info()来填充Template,但我收到以下错误...

Cheetah.NameMapper.NotFound: cannot find 'myinfo'
4

1 回答 1

1

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

为了解决这个问题,我不得不$myinfo.keyword_string$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
于 2021-12-16T14:53:06.263 回答