@angelzzz

Как использовать source в handlebars из внешнего файла, а не из инлайн код (чтобы добавить css, js и изменять title)?

Очень странно, что это не включено в документацию. По крайней мере я не смог этого найти.

Есть стандартный паттерн использованияhandlebars :

var source = "<p>Hello, my name is {{name}}. I've uploaded {{number}} of photo(s)</p>" +
  "<div>{{#each element}}" +
  "<p><img src='{{ this }}'></p>" +
  "{{/each}}</div>";

  var template = handlebars.compile(source);
  var html = template(data);
  console.log(html);


Есть ли возможность использовать файл вместе инлайн в source. Что-то на подобии:

var source = require('./template.html')

var template = handlebars.compile(source);
var html = template(data);
console.log(html);


А внутри template.html иметь следующий код:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>{{title}}</title>
  <link rel="stylesheet" media="all" href="/somefile.css">
  <script type="text/javascript" src="/somefile.js"></script>
</head>
<body>
  <h1 class="h1-like">{{sometext}}</h1>
  <p>{{somepara}}</p>
</body>
</html>


Как видно из примера мне необходимо формировать примерно одинаковые html файлы с помощью Nodejs из данных, которые я получаю от БД.

P.S. Или может есть другой шаблонизатор, который позволяет делать это просто?
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Можно сделать так:
var fs = require('fs');

var source = fs.readFileSync('./template.html', 'utf8');

var template = handlebars.compile(source);
var html = template(data);
console.log(html);


Также, неплохой идеей было бы делать это асинхронно:
var fs = require('fs');

fs.readFile('./template.html', 'utf8', function(err, source) {
  var template = handlebars.compile(source);
  var html = template(data);
  console.log(html);
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы