【问题标题】:Rendering jade template with layout (without express)带布局的渲染玉石模板(不含快递)
【发布时间】:2012-03-13 00:17:50
【问题描述】:

当您在 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);

【问题讨论】:

  • 我认为 Express 3.0 放弃了布局(至少默认启用),支持使用命名块的模板继承,所以也许这可以帮助您做出决定:groups.google.com/group/express-js/browse_thread/thread/…(另请参阅初始化新项目时 express.js 生成的存根:github.com/visionmedia/express/blob/master/bin/express)。
  • @PuerkitoBio 感谢您的信息;值得指出,但我真正的问题是这些是唯一的方法吗?将这些类型的东西放在一起的人通常会为常见用例嵌入短路 - 我并不总是足够聪明地找到它们!
  • @AJ。谢谢sn-p。

标签: templates node.js pug


【解决方案1】:

我相信答案是“不”,您不会错过任何技巧。在我看来,您概述的两个选项是使用玉生成文件的两种最直接的方法。当然,也有很多非玉方法。例如,您可以使用 plates 方法合并内容,旧的 String.replace,或者将您的布局拆分为单独的页眉广告页脚片段文件,然后将它们按头、体、脚顺序连接。

【讨论】:

  • 感谢您 - 我感谢 Flatiron 框架的链接,并提醒您这些不是新问题。有时很容易迷失在云端:)
猜你喜欢
  • 2012-08-08
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 2015-10-26
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多