首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gulp具有不同JSON数据的多个Nunjucks文件

使用gulp具有不同JSON数据的多个Nunjucks文件
EN

Stack Overflow用户
提问于 2017-10-01 00:37:30
回答 1查看 1.9K关注 0票数 1

我想使用gulp和Nunjucks同时生成多个不同内容的模板文件。这些模板都将具有完全相同的布局,但是传入不同的文本/图像变量。

我能够成功地生成一个index.html文件,但我不知道如何设置它,以便同时创建多个文件。以下是我所拥有的一个简化版本:

gulpfile.js

代码语言:javascript
复制
var nunjucks = require('gulp-nunjucks-render');
var data     = require('gulp-data');

gulp.task('nunjucks', function () {
    return gulp
        .src('./src/layouts/**/*.+(html|nunjucks)')
        .pipe(data(function () { return require('./src/data.json'); }))
        .pipe(nunjucks({ path: ['./src/templates'] }))
        .pipe(gulp.dest('./dist'));
});

layout.nunjucks

代码语言:javascript
复制
<head>
    {% block title %} {% endblock %}
</head>

index.nunjucks

代码语言:javascript
复制
{% extends "layout.nunjucks" %}

{% block title %}
    <title>{{ title }}</title>
{% endblock %}

data.json

代码语言:javascript
复制
{
    "title": "DEFAULT"
}

在每个文件都有不同标题的情况下,更改此工作流以生成多个文件的最佳方法是什么?

我发现我可以创建多个index.nunjucks文件,但是看起来它们都使用相同的data.json文件。我也不想为每个JSON文件创建一个单独的JSON文件。

我是否可以向我的data.json文件中添加一个数组,让Nunjucks循环起来,并为找到的每个对象创建一个单独的文件?例如:

data.json

代码语言:javascript
复制
{
    "files": [{
        "title": "DEFAULT",
    }, {
        "title": "DEFAULT #2"
    }]
}

或者是否有一种方法可以在index.nunjucks文件中设置变量而不依赖于将它们存储在JSON中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-02 20:26:15

找到了这样做的方法:在每个Nunjucks索引文件中,我将一个名为email的变量设置为文件名,并使用与文件名与其自身内容相匹配的新对象更新了我的data.json文件。

default.nunjucks

代码语言:javascript
复制
{% set email = default %}

{% include "index.nunjucks" %}

test.nunjucks

代码语言:javascript
复制
{% set email = test %}

{% include "index.nunjucks" %}

index.nunjucks

代码语言:javascript
复制
{% extends "layout.nunjucks" %}

{% block title %}
    <title>{{ email.title }}</title>
{% endblock %}

layout.nunjucks

代码语言:javascript
复制
<head>
    {% block title %} {% endblock %}
</head>

data.json

代码语言:javascript
复制
{
    "default":
    {
        "title": "TITLE"
    },
    "test":
    {
        "title": "TEST TITLE"
    }
}

当通过吞咽编译时,两封单独的电子邮件会使用相同的模板以自己的标题创建。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46508242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档