独学者Fossa

独学していることなど

Nunjucksで、配列判定

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ボタンで、ABCも選択した場合を想定したのですが、判定した結果、Arrayと表示されるはずです。

余談

{% set value = [ "A" ,"B", "C" ] %}

jsonファイルを読み込む必要がない場合は、変数定義すればいいと思います。

*1:今回は文字列を想定しています

*2:今回は配列を想定しています