При рендеринге jade шаблонов в экспрессе вы можете сконфигурировать ваше приложение с 'view options', { layout: true }
, и визуализированные шаблоны будут автоматически подключены к локальному body
шаблона макета.
Я пытаюсь добиться эквивалентного поведения при рендеринге файлов из node.js, но без экспресс-фреймворка (я просто создаю статические файлы как часть большого конвейера).
Возможны два варианта:
- Загрузка основного шаблона и макета, преобразование в функции, сначала визуализация шаблона, а затем передача результатов в функцию макета
- Используйте стандартное наследование шаблонов и блочную структуру, но тогда я явно использую именованные блоки
Это единственные варианты (которые, честно говоря, все еще потрясающие), или я упускаю какой-то трюк?
Редактировать
Вот примерный вариант первого варианта на случай, если кому-то будет интересно:
// 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);