使用布局渲染jade模板(不使用express)

6
当你在express中渲染jade模板时,你可以使用'view options',{ layout: true }配置你的应用程序,渲染的模板将自动插入到布局模板的body本地变量中。
我正在尝试从node.js渲染文件来实现相同的行为,但没有使用express框架(我只是作为更大流程的一部分构建静态文件)。
似乎有两个选择:
  • 加载主模板和布局,转换为函数,先渲染模板,然后将结果传递给布局函数
  • 使用标准模板继承和块结构,但我明确地使用了命名块
这些是唯一的选择吗(还是很棒的),还是我错过了什么技巧?

编辑

如果有人感兴趣,这是第一个选项的初步版本:

// Load jade
var jade = require('jade');

// Load actual template text
var layout = fs.readFileSync('layout-path', 'utf8')
    tpl = fs.readFileSync('tpl-path', 'utf8');

// Compile template rendering function
layout = jade.compile(layout, { pretty: true, filename: 'layout-path' });
tpl = jade.compile(tpl, { pretty: true, filename: 'tpl-path' });

// Render jade template, passing in the info
var output = layout({ body: tpl({ local1: some_var, local2: some_var }) }

// Write rendered content to file
fs.writeFileSync('output.html', output);

1
我认为Express 3.0取消了默认启用的布局,转而采用具有命名块的模板继承,因此也许这可以帮助你做出决定:http://groups.google.com/group/express-js/browse_thread/thread/2ec558510be6d0a4(还可以查看通过初始化新项目时express.js生成的存根:https://github.com/visionmedia/express/blob/master/bin/express)。 - mna
@PuerkitoBio 感谢提供的信息;值得指出的是,但我的真正问题是这些是唯一的方法吗?那些组织这些类型事物的人通常会为常见用例嵌入一个短路 - 只是我并不总是聪明到足够找到它们! - AJ.
1个回答

3
我认为答案是否定的,你没有错过任何技巧。你提出的两种选择似乎是使用jade生成文件的最直接的两种方式。当然,还有很多非jade的方法。例如,你可以将内容与plates方法合并,使用String.replace,或将布局拆分成单独的头部和底部片段文件,并按头、主体、脚的顺序连接它们。

谢谢你的回复 - 我很感激你提供的Flatiron框架链接和提醒我这些问题并不是新问题。有时候我们很容易迷失在云端 :) - AJ.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接