Form
をいじっています。
Radio
ボタンだと、選択肢の内の一つだけクリックするので、文字列。*1
Check
ボタンだと、選択肢の中から、いくつかクリックするので、配列。*2
文字列なのか、配列なのか、判定する必要が出てきました。
Nunjucks
は、Jinja2
に影響を受けているテンプレートエンジンらしいので、探せばすぐ見つかると思いましたが、意外に苦戦しました。
Filter
を追加する方法が見つかりました。
使用環境
Name | Version |
---|---|
node | 14.17.1 |
npm | 7.19.0 |
Nunjucks | 3.2.3 |
node nunjucks.js
const fs = require('fs'); const path = require('path'); const nunjucks = require('nunjucks'); const jsonObject = JSON.parse(fs.readFileSync('./a.json', 'utf8')); const env = new nunjucks.Environment(); env.addFilter('isArray', function(obj) { return Array.isArray(obj); }); const result = env.render(path.join(__dirname, './src/pages/index.njk'), jsonObject);
index.njk
{% if (value | isArray) %} <p>Array</p> {% endif %}
a.json
[ { "value": [ "A", "B", "C" ] } ]
Check
ボタンで、A
もB
もC
も選択した場合を想定したのですが、判定した結果、Array
と表示されるはずです。
余談
{% set value = [ "A" ,"B", "C" ] %}
json
ファイルを読み込む必要がない場合は、変数定義すればいいと思います。