Node.js和swig模板引擎 - 包括模板内的模板

时间:2013-10-12 15:12:01

标签: node.js swig-template

我尝试创建包含登录表单的主页面(node.js和mongoDB应用程序的一部分)。 要添加视图部分,我包含了带有返回HTML功能的js文件,但我可以看到更好的是使用模板引擎。 一切都没问题,直到我将一个已编译的swig部分包含在另一个内部。 主页的输出正常,但登录部分输出如页面上的文本。 如何将登录HTML输出为HTML而不是纯文本?

需要更多信息才能理解这个问题吗?

提前谢谢。

var swig  = require('swig');
var mainPage_tpl = swig.compileFile(__dirname+'/../views/mainpage_tpl.html');
var formLogin_tpl = swig.compileFile(__dirname+'/../views/login_tpl.html');

var loginOutput =  formLogin_tpl();
var mainPageOutput = mainPage_tpl({
    title: 'Sometitle',
    pagetitle: 'Somepagetitle',
    content: loginOutput
});

exports.get = function(req, res){
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(mainPageOutput);
    res.end();
}

mainpage_tpl.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>{{title}}</title>
    <link rel="stylesheet" href="/assets/reset.css" />
    <link rel="stylesheet" href="/assets/style.css" />
    <script type="text/javascript" src="/assets/jquery-2.0.0.js"></script>
    <script type="text/javascript" src="/assets/script.js"></script>
</head>

<body id="login_page">
    <h1>{{pagetitle}}</h1>
    <div id="content">{{content}}</div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

如果你想要包含文字HTML,你需要告诉Swig不要使用safe过滤器来逃避它:

...
<div id="content">{{ content|safe }}</div>
...