17

我想使用 Nunjucks 模板,但想传入我自己的 JSON 数据以在模板上使用。

这里的文档非常稀少。

https://mozilla.github.io/nunjucks/templating.html

谢谢你。

4

4 回答 4

9

您可以使用gulp-data ,它允许您将 json 文件传递​​给用于渲染 Nunjucks 的任务运行器。

gulp.task('nunjucks', function() {
  return gulp.src('app/pages/**/*.+(html|nunjucks)')
    // Adding data to Nunjucks
    .pipe(data(function() {
      return require('./app/data.json')
    }))
    .pipe(nunjucksRender({
      path: ['app/templates']
    }))
    .pipe(gulp.dest('app'))
});
于 2016-05-23T23:52:24.593 回答
5

只需结合使用dumpsafe过滤器:

<script>
  const choices = {{ yourJsonVar | dump | safe }};
</script>
于 2019-12-20T09:27:11.603 回答
1

2019 年在这里找到了这颗宝石,但认为它对像我这样搜索过但没有找到任何东西的人会有所帮助。

首先,在宏中创建一个带有预期参数的模板部分

{% macro render(secTitle, secSubtitle) %}
    <h4 class="heading">
        {{ secTitle | safe }}, {{ secSubtitle | safe }}
    </h4>
{% endmacro %}

另存为[yourname].tpl- 在这种情况下heading.tpl

然后,导入这个块并使用上面宏中指定的函数(render()在这种情况下)

{% block heading %}
    {% import "components/heading.tpl" as heading with context %}
    {{ heading.render(
        secTitle='Hello there',
        secSubtitle='General Kenobi'
    ) }}
{% endblock %}

这将导致:

<h4 class="heading">
    Hello there, General Kenobi
</h4>

请注意| safe组件中的字符串之后 - 这意味着它将以 HTML 格式输出字符串(例如,<br>将创建一个新行而不是输出<br>文本)。

于 2019-05-31T14:32:08.950 回答
0

您可以使用他们的异步渲染来实现这一点。

https://mozilla.github.io/nunjucks/api.html#render

$.getJSON('/path/to/file.json', function (result) {
        nunjucks.render('path/to/template/file.html', { result : result }, function (err, res) {
            // do something
        });
    });
于 2015-08-05T14:29:40.190 回答