使用Metalsmith和swig访问模型中的单个对象

时间:2016-04-20 22:44:27

标签: swig-template metalsmith yaml-front-matter

我有一个json数据文件,其中包含多个带有命名键的对象。

{
  "berlin:" : {
    "location": "Berlin",
    "folder": "berlin-2016"
  },
  "seattle" : {
    "location": "Seattle ",
    "folder": "seattle-2016"
  }
}

在我的内容文件中,我想指定要使用的模型中的哪个对象,然后在swig中引用它。像这样:

---
model:
  conference: conferences['berlin']
---    

{{ model.conference.location }}

这可能吗?

1 个答案:

答案 0 :(得分:0)

这绝对可以与metalsmith合作。我没有完整的构建过程图,但对于此解决方案,您必须使用metalsmith javascript api

./ data.json

{
  "berlin:" : {
    "location": "Berlin",
    "folder": "berlin-2016"
  },
  "seattle" : {
    "location": "Seattle ",
    "folder": "seattle-2016"
  }
}

./ build.js

// Dependencies
var metalsmith = require('metalsmith');
var layouts = require('metalsmith-layouts');

// Import metadata
var metadata = require('./data.json');

// Build
metalsmith(__dirname)
  // Make data available
  .metadata(data)

  // Process templates
  .use(layouts('swig'))

  // Build site
  .build(function(err){
    if (err) throw err;
  });

然后在根项目文件夹中运行node build.js进行构建。在您的模板中,来自data.json的数据将以{{ berlin.location }}形式提供。

您也可以在没有javascript api的情况下执行此操作(我不建议这样做会因为您失去一些灵活性),在这种情况下您将使用插件(例如:metalsmith-json