使用swig模板渲染文件而不使用express

时间:2013-10-22 21:39:34

标签: node.js swig-template

我使用swig(django风格模板引擎)一直成功表达。我正在尝试在请求/渲染之外使用swig,只是将上下文传递给swig标记文件并让它生成HTML。

如果不使用express,我无法弄清楚API。

从网站上他们有这个例子我无法开始工作: https://github.com/paularmstrong/swig/tree/bd3f5a0dc08078ffd4372fa61248f8d50d8cbbf8

var template  = require('swig'); // v1.1.0
var tmpl = template.compileFile('/path/to/template.html');
tmpl.render({
    pagename: 'awesome people',
    authors: ['Paul', 'Jim', 'Jane']
});

有一个错误说tmpl对象上不存在render? (compileFile似乎运行正常。)

显然我不理解或需要在示例之外包含这些内容。

更新:在评论后添加了swig的版本号,以明确我正在使用的版本。

4 个答案:

答案 0 :(得分:2)

来自对原始问题的评论:

看起来您正在尝试使用Swig@~1.0,但您提供的链接指向Swig@0.14.0。 Swig的API在v0和v1之间发生了巨大的变化。

始终可以在http://paularmstrong.github.io/swig/

找到当前支持的版本的文档

答案 1 :(得分:2)

你看过https://github.com/assemble/assemble了吗? Assemble是一个基于Grunt的静态站点生成器,它非常易于使用,而Swig是Assemble的引擎之一。以下是一些资源:

答案 2 :(得分:2)

以下是渲染swig模板的一些步骤。 1.使用命令npm install swig --save

安装swig

-create server.js

var http = require('http'), swig=require('swig');
http.createServer(function(request, response){
var tpl = swig.compileFile('index.html');
renderedHtml =  tpl({
                         say:'hello word'
                    });
response.writeHead(200, { 'Content-Type': 'text/html' });
response.end(renderedHtml);
}).listen(8080);

-create index.html模板文件为。

    <html>
    <head>
    <meta charset="utf-8" />
   </head>
    <body>
     <h2>{{say}}</h2>   
    </body>
    </html>

答案 3 :(得分:0)

您是否需要告诉swig模板的路径?

var swig  = require('swig');
swig.init({ root: __dirname + '/templates' });

var tmpl = swig.compileFile('home.html');
tmpl.render({
    pagename: 'awesome people',
    authors: ['Paul', 'Jim', 'Jane']
});