Как я могу определить глобальные переменные в nunjucks?

Как с помощью nunjucks определить некоторые глобальные переменные, которые всегда должны быть доступны во всех шаблонах?

В идеале они должны быть указаны где-то в параметрах среды или конфигурации, и их не нужно объединять в контекстный словарь при каждом вызове nunjucksEnvironment.render.


person mpen    schedule 29.12.2013    source источник
comment
Если вы используете Express, вы можете использовать app.locals для хранения глобальных переменных.   -  person robertklep    schedule 29.12.2013
comment
@robertklep: Нет Express, просто Connect.   -  person mpen    schedule 29.12.2013
comment
На самом деле, я хочу использовать эти шаблоны и на стороне клиента, так что... решение не может зависеть от технологии на стороне сервера.   -  person mpen    schedule 29.12.2013


Ответы (3)


Я просто искал это и пришел сюда. Похоже, теперь есть рекомендуемый способ, который был недавно добавлен в версия 1.0.6.

См. Environment.addGlobal.

person Joe    schedule 04.09.2014
comment
Ура! Спасибо, что сообщили мне об этом. - person mpen; 05.09.2014

Это может быть также полезно для кого-то. При работе с глобальными переменными в nunjucks можно не писать какой-либо код js.

Вам необходимо создать файл _globals.html, содержащий все глобальные переменные.

{% set some_var1 = "Foo" %}
{% set some_var2 = "Bar" %}

Затем включите _globals.html на любую страницу, где вам нужна глобальная переменная. Например. somePage.html

{% import '_globals.html' as globals %}

<span>{{globals.some_var1 }}</span>
<span>{{globals.some_var2 }}</span>

Для получения дополнительной информации посетите http://mozilla.github.io/nunjucks/templating.html#set

person Aliaksei Maniuk    schedule 19.12.2017

Это не задокументировано (или, возможно, рекомендовано), но это работает:

var njglobals = require('nunjucks/src/globals');
njglobals.someVar = 'someValue';

Теперь вы можете использовать someVar в своих шаблонах.

При этом не перезаписывайте существующие свойства объекта njglobals (для [email protected] это range, cycler и joiner).

person robertklep    schedule 29.12.2013
comment
Не уверен, почему глобальные переменные не рекомендуются. Я хочу установить переменную среды отладки, например, чтобы условно включить livereload и минифицированные файлы. - person mpen; 30.12.2013
comment
Это не столько не рекомендуется, сколько повторное использование внутренней части модуля, потому что для него, похоже, нет общедоступного API :) - person robertklep; 30.12.2013