我正在寻找类似于例如C++的模板/生成器库.Ruby的Erb,Haml,PHP的Smarty等
如果我会运行一些基本功能,如循环,if/else,int转换为字符串等,那将是很棒的.
如果我可以在哈希映射中传递所有这些参数而不是为每个参数调用某个函数,那么传递给模板渲染引擎的参数也很重要.
你有什么建议?
我也可以看到嵌入像Lua这样的语言的可能性,但是我还没有为它找到一个模板化的库.
在jinja中,变量loop.index保存当前运行循环的迭代次数.
当我有嵌套循环时,如何在内循环中获得外循环的当前迭代?
我的用例如下:
我正在使用有效HTML片段但不是有效页面的部分组成HTML页面,如Divs ; 这些元素正在使用CSS来管理他们的风格.
我想允许每个片段负责其自己的样式要求,并且不依赖于主片段(具有"HTML"标记的片段)中的样式表的声明.
所以这里有一个问题:是否有任何(标准)方法在HEAD元素之外添加一些CSS样式(通过"样式"属性排除内联样式)?
我想我可以使用框架,但我宁愿避免这种解决方案.
在此先感谢您的帮助.
最终编辑:
感谢zzzzBov,JMC Creative和moontear的提议,经过一些测试后,答案如下:
因为我必须支持电子邮件客户端,所以我使用了第二种解决方案,而且更简单.
感谢您的关注和参与.
我为什么要在PHP中使用模板系统?
我的问题背后的原因是:PHP本身是功能丰富的模板系统,我为什么要安装另一个模板引擎?
到目前为止我找到的唯一两个职业选手是:
......与利弊相比,两者都可以忽略不计.
小例子:
PHP
<h1><?=$title?></h1>
<ul>
<? foreach ($items as $item) {?>
<li><?=$item?></li>
<? } ?>
</ul>
Run Code Online (Sandbox Code Playgroud)
Smarty的
<h1>{$title}</h1>
<ul>
{foreach item=item from=$items}
<li>{$item}</li>
{/foreach}
</ul>
Run Code Online (Sandbox Code Playgroud)
我真的没有看到任何差异.
我必须忽略一些非常简单的东西,但我似乎无法弄清楚如何使用哈希映射的值渲染一个简单的ERB模板.
来自python的我对ruby比较新.我有一个ERB模板(不是HTML),我需要使用从哈希映射中获取的上下文来渲染,我从外部源接收.
但是,ERB的文档说明该ERB.result
方法需要一个binding
.我才知道,他们是保持着可变背景的红宝石东西(像locals()
和globals()
在python,我相信?).但是,我不知道如何从哈希映射中构建绑定对象.
一点点(很多,实际上)谷歌搜索给了我这个:http://refactormycode.com/codes/281-given-a-hash-of-variables-render-an-erb-template,它使用了一些红宝石元编程魔法逃避我
那么,这个问题不是一个简单的解决方案吗?或者是否有更好的模板引擎(不依赖于HTML)更适合这种情况?(我只选择了ERB,因为它在stdlib中).
Jinja2和Mako显然都非常快.
这些比较如何(功能较少但可能对我正在做的事情足够好)string.Template?
我在Handlebars中创建了一个帮助逻辑的帮助器,但我的模板将返回的html解析为文本而不是html.
我有一个测验结果页面,在测验完成后呈现:
<script id="quiz-result" type="text/x-handlebars-template">
{{#each rounds}}
{{round_end_result}}
{{/each}}
<div class="clear"></div>
</script>
Run Code Online (Sandbox Code Playgroud)
对于每一轮,我使用一个帮助器来确定渲染圆形结果的模板:
Handlebars.registerHelper("round_end_result", function() {
if (this.correct) {
var source = '';
if (this.guess == this.correct) {
console.log("correct guess");
var source = $("#round-end-correct").html();
} else {
var source = $("#round-end-wrong").html();
}
var template = Handlebars.compile(source);
var context = this;
var html = template(context);
console.log(html);
return html;
} else {
console.log("tie");
}
});
Run Code Online (Sandbox Code Playgroud)
这是一个描述正确回合的模板(让我们假设它呈现了#round-end-correct模板):
<script id="round-end-correct" type="text/x-handlebars-template">
<div></div>
</script>
Run Code Online (Sandbox Code Playgroud)
以下是渲染的内容:
<div></div>
Run Code Online (Sandbox Code Playgroud)
不是HTML,而是文本.我如何让它实际将HTML呈现为HTML而不是文本?
我没有找到jinja2和Mako的良好比较.你会用什么来完成什么任务?
我个人很满意mako(在一个pylons网络应用程序环境中),但我很想知道jinja2是否有一些很好的功能/改进mako不? - 或者可能是缺点? -
我必须创建conf文件,init.d
它们非常相似.这些文件允许在我的服务器上部署新的http服务.这些文件是相同的,只有一些参数从一个文件更改为另一个文件(listen_port
域,服务器上的路径......).
由于这些文件中的任何错误都会导致服务错误,我想使用bash脚本创建这些文件.
例如:
generate_new_http_service.sh 8282 subdomain.domain.com /home/myapp/rootOfHTTPService
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种可以与bash一起使用的模板模块.这个模板模块将使用一些通用的conf和init.d脚本来创建新的脚本.
你有提示吗?如果不是,我可以使用python模板引擎.