code: function Template(options) {
    this.options = options;
  
    // layout
    this.isLayout = !!options.config.layout;
    this.master = this.isLayout ?
      path.join(options.dirname, options.config.layout) :
      null;
  
    // build the doT templates
    this.templates = {};
    this.settings = _.clone(settings.dot);
    this.def = new DotDef(options);
  
    // view data
    this.viewData = [];
    if (_.has(options.express, 'settings')
      && _.has(options.express.settings, 'view data')
    ) {
      this.settings.varname = _.reduce(
        options.express.settings['view data'],
        function(result, value, key) {
          this.viewData.push(value);
          return result + ', ' + key;
        },
        settings.dot.varname,
        this
      );
    }
  
    // view shortcut
    this.shortcuts = [];
    if (_.has(options.express, 'settings')
      && _.has(options.express.settings, 'view shortcut')
    ) {
      this.shortcuts = options.express.settings['view shortcut'];
      this.settings.varname += ', ' + _.keys(this.shortcuts).join();
    }
  
    // doT template
    for (var key in options.sections) {
      if (options.sections.hasOwnProperty(key)) {
        this.templates[key] = dot.template(
          options.sections[key],
          this.settings,
          this.def
        );
      }
    }
  }
docs: @constructor Template object with a layout structure. This object is cached
  if the 'options.cache' set by express is true.
  @param {Object} options The constructor parameters:
  
  {Object} engine The option from the engine
  
  There are 2 options
  
  Case 1: A layout view
  {String} master The master template filename
  {Object} sections A key/value containing the sections of the template
  
  Case 2: A standalone view
  {String} body The template string