Skip to content

Instantly share code, notes, and snippets.

@benw
Created October 3, 2012 00:29
Show Gist options
  • Select an option

  • Save benw/3824204 to your computer and use it in GitHub Desktop.

Select an option

Save benw/3824204 to your computer and use it in GitHub Desktop.
Loads partial handlebars templates from files in a directory
// Helps with this problem:
// http://stackoverflow.com/questions/8059914/express-js-hbs-module-register-partials-from-hbs-file
var hbs = require('hbs');
var fs = require('fs');
var partialsDir = __dirname + '/../views/partials';
var filenames = fs.readdirSync(partialsDir);
filenames.forEach(function (filename) {
var matches = /^([^.]+).hbs$/.exec(filename);
if (!matches) {
return;
}
var name = matches[1];
var template = fs.readFileSync(partialsDir + '/' + filename, 'utf8');
hbs.registerPartial(name, template);
});
@ChristianRich
Copy link
Copy Markdown

Highly useful. Thanks.

@oceansize
Copy link
Copy Markdown

Brilliant! Thank you for this :)

@tapankumar
Copy link
Copy Markdown

Thanks.. It works..

If you want to read the directory recursively. Use below code

var dir = path.join(__dirname, 'views');
//console.log(partialsDir);

const walkSync = (dir, filelist = []) => {
  fs.readdirSync(dir).forEach(file => {

    filelist = fs.statSync(path.join(dir, file)).isDirectory()
      ? walkSync(path.join(dir, file), filelist)
      : filelist.concat(path.join(dir, file));

  });
  return filelist;
}

var filelist = walkSync(dir);
if (filelist.length > 0) {
  filelist.forEach(function (filename) {
    var matches = /^([^.]+).hbs$/.exec(path.basename(filename));
    if (!matches) {
      return;
    }
    var name = matches[1];
    console.log(name);
    var template = fs.readFileSync(filename, 'utf8');
    Handlebars.registerPartial(name, template);
  });
}

@mdcovarr
Copy link
Copy Markdown

thanks you very helpful!

@tcelestino
Copy link
Copy Markdown

thanks a lot about it!! 🦀

@biswajit-saha
Copy link
Copy Markdown

@tapankumar thank you very much for the code. I have a question.
let's say our template structure is like below

Index.hbs
----partials
--------partial1.hbs
--------subfolder
------------partials-under-subfolder.hbs

Now how should I include the partials-under-subfolder within index.hbs template file?

@sebastianpikand
Copy link
Copy Markdown

@tapankumar thank you very much for the code. I have a question.
let's say our template structure is like below

Index.hbs
----partials
--------partial1.hbs
--------subfolder
------------partials-under-subfolder.hbs

Now how should I include the partials-under-subfolder within index.hbs template file?

had the same problem. seems like {{> subfolder_name/partial_under_subfolder.hbs}} should work

@Heilemann
Copy link
Copy Markdown

Heilemann commented Apr 19, 2022

nm.

@benw
Copy link
Copy Markdown
Author

benw commented Oct 11, 2022 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment