如何将JSON数据传递到Nunjucks模板?

时间:2015-08-03 06:18:42

标签: jinja2 nunjucks

我想使用Nunjucks模板但想要传递我自己的JSON数据以用于模板。

这里的文档很稀疏。

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

谢谢。

4 个答案:

答案 0 :(得分:8)

您可以使用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'))
});

答案 1 :(得分:0)

在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> )。

答案 2 :(得分:0)

只需结合使用dumpsafe过滤器:

<script>
  const choices = {{ yourJsonVar | dump | safe }};
</script>

答案 3 :(得分:-1)

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

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
        });
    });