如何将 StringTemplate 引擎集成到 CherryPy Web 服务器中

Posted

技术标签:

【中文标题】如何将 StringTemplate 引擎集成到 CherryPy Web 服务器中【英文标题】:How to integrate the StringTemplate engine into the CherryPy web server 【发布时间】:2010-09-27 14:50:32 【问题描述】:

我喜欢 StringTemplate 引擎,我喜欢 CherryPy Web 服务器,而且我知道它们可以集成。

谁做的?怎么样?

编辑:TurboGears 框架采用 CherryPy Web 服务器并捆绑其他相关组件,例如模板引擎、数据访问工具、javascript 工具包等。我对 MochiKit 感兴趣,需要 CherryPy,但我不想要任何其他组件模板引擎比 StringTemplate (架构很关键——我不想要另一个损坏/坏的模板引擎)。

因此,通过解决如何将 StringTemplate 与 TurboGears 集成来回答这个问题是可以接受的。

通过解决如何在 Google App Engine 中使用 CherryPy 和 StringTemplate 来回答这个问题也是可以接受的。

谢谢。

【问题讨论】:

不知道确切的答案,但我建议您看看 TurboGears 框架。它集成了cherrypy和kid模板引擎。docs.turbogears.org/1.0/GettingStarted/BigPicture 【参考方案1】:

根据两者的教程,它看起来非常简单:

导入字符串模板 进口樱桃 类 HelloWorld(对象): 定义索引(自我): 你好 = stringtemplate.StringTemplate("你好,$name$") 你好[“名称”] =“世界” 返回str(你好) index.exposed = 真 cherrypy.quickstart(HelloWorld())

您可能希望 CherryPy 函数在磁盘上的某个位置找到 StringTemplate,但总体思路是这样的。

Django 在概念上是相似的:url 映射到 python 函数,python 函数通常构建一个上下文字典,使用该上下文对象渲染一个模板,然后返回结果。

【讨论】:

【参考方案2】:

罗伯,

人们选择工具是有原因的。 StringTemplate 在 Python 中并不是很流行,有一些模板引擎得到了更好的支持并且拥有更广泛的受众。如果不喜欢 Kid,还有 Django 的模板、Jinja、Cheetah 等。也许您可以在其中一个中找到您非常喜欢的 StringTemplate 功能,并从此过上幸福的生活。

【讨论】:

人们因选择糟糕的 X 而臭名昭著,包括模板引擎,所以我对人气竞赛不感兴趣。我想要一个好的模板引擎,这意味着强制执行类似 MVC 的分离,它只有一个选项:StringTemplate。没有人打扰过。 +1 取消投票。 StringTemplate 有笨拙的 if-then 语句,根本没有 for 循环......并且没有对变量的属性访问......如果它们算作程序逻辑,那肯定有点苛刻? Eli:您提到“选择工具是有原因的”。然而,我从你的论点中推断出的原因似乎是由 Rob 没有分享的担忧所引导的。 StringTemplate 的设计师 Terence Parr 将文本处理作为他毕生的工作(字面意思)。我鼓励您阅读解释 ST 哲学的论文:“用于生成结构化文本的函数式语言”(cs.usfca.edu/~parrt/papers/ST.pdf)和“执行严格的模型-视图分离”在模板引擎中”(cs.usfca.edu/~parrt/papers/mvc.templates.pdf) 就像 Python 的空白一样,我曾经认为他的想法很疯狂...... Nikhil:见antlr.org/wiki/display/ST/Five+minute+Introduction。 ST 允许引用模板命名空间中对象的属性,例如 。循环是在多值属性(列表、字典等)上进行类似 map() 的函数迭代的形式,例如 $s$; separator="\n"> 我也不同意你关于“尴尬的 if-then 语句”的看法。这看起来和我所看到的 if/then 一样普通的模板: 是的,有用户!

以上是关于如何将 StringTemplate 引擎集成到 CherryPy Web 服务器中的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Durandal#composition 集成到淘汰赛模板引擎中

流体模拟如何集成到刚体 phisix 引擎中?

如何将 presto 集群集成到 hadoop 集群?

是否可以将浏览器引擎集成到自定义浏览器界面?

如何将外部库集成到 Cocos Android 项目中

StringTemplate 和 FreeMarker 之间的主要区别是啥?