Данные JSON в nunjucks шаблонизируются, используя gulp-данные

Я хотел бы использовать данные JSON внутри nunjucks "set". Минимальный пример:

index.html

{% set divname='foo' %}
{% include 'template.nunjucks' %}

template.nunjucks

<div class="{{divname}}"></div>

Который прекрасно работает. Я хотел бы переместить данные, например, divname, из файла index.html в файл JSON, назовем его data.json:

{
"div_name": "foo"
}

Используя gulp-data, мы можем прочитать этот файл data.json и использовать {{div_name}} почти в любом месте index.html..almost. Кажется невозможным использовать {{div_name}} внутри содержимого nunjucks, вероятно, из-за вложенного {?

{% set divname='{{div_name}}' %}

не может получить данные JSON, вывод

<div class="{{divname}}"></div>   instead of   <div class="foo"></div>

Очень упрощенная причина для того, чтобы хотеть такого поведения, состоит в том, что в data.json я могу определить несколько divnames (divname1=foo, divname2=bar, divname3=ball) и затем повторно использовать template.nunjucks. Когда разметка в template.nunjucks или index.html становится очень сложной, это отличный способ использовать всю мощь шаблонизаторов. Реальный вариант использования - это очень длинный / полусложный шаблон AWS CloudFormation, в котором имена ресурсов используются во многих местах, а помимо этого различные файлы data.json используются для сред разработки и разработки. Перемещение значений в dev-data.json и prod-data.json с сохранением только одного "индексного" файла для определения инфраструктуры, который извлекает шаблоны, сделает работу более удобной для сопровождения.

{% set divname={{divname1}} %}
{% include 'template.nunjucks' %}
{% set divname={{divname2}} %}
{% include 'template.nunjucks' %}

DEV-data.json

divname1 = dev-foo
divname2 = dev-bar

прод-data.json

divname1 = foo
divname2 = bar

Вуаля, разные данные для dev и prod с одним файлом index.html для поддержки

1 ответ

Решение

Никогда не использовал nunjucks раньше, но я думаю, вы могли бы снять скобки вокруг title_data вset заявление: {% set title = title_data %},

Но зачем беспокоиться о переназначении, если у вас уже есть дескриптор строки заголовка. Просто шаблон это напрямую: <title>{{ title_data }}</title>

Другие вопросы по тегам