CSVデータをテーブル化
このチュートリアルでは、JekyllでCSVを読み込みデータをHTML tableにレンダリングする方法を示します。
このアプローチは:
- CSVの最初の行をHTML tableのヘッダとして使用します。
- 残りの行をtableのボディにします。
- 元のCSVの列の順序を保持します。
- 参照される_任意_の有効なCSVを処理するのに十分な柔軟性を有します。
列の名前は特定のものである必要はなく、何列あってもかまいません。
このチュートリアルの秘訣は、行データを反復処理するときに、_最初の行_を取得して、ヘッダ名を取得できることです。
以下の手順に従って、作成者のサンプルCSVをHTMLテーブルに変換します。
1. CSVを作成
Jekyllがピックアップできるように、Data filesディレクトリにCSVファイルを作成します。簡単なpathとCSVデータを以下に示します:
_data/authors.csv
First name,Last name,Age,Location
John,Doe,35,United States
Jane,Doe,29,France
Jack,Hill,25,Australia
これでJekyllで以下のようにするとデータファイルが有効になります:
{{ site.data.authors }}
2. テーブルを追加
テーブルを表示したいHTMlもしくはマークダウンファイルを選択します。
例えば:table_test.md
---
title: Table test
---
行を調べる
最初の行を取り出し、inspect
フィルタを使用してどのように見えるかを確認します。
{% assign row = site.data.authors[0] %}
{{ row | inspect }}
結果は次のような_hash_ (キーと値のペアで構成されるオブジェクト)です。
{
"First name"=>"John",
"Last name"=>"Doe",
"Age"=>"35",
"Location"=>"United States"
}
Jekyllは、元のCSVに基づいて、実際にここで順序を_保持する_ことに注意してください。
行の解凍
簡単な解決策は、キーで行の値を検索するときにフィールド名をハードコードすることです。
{{ row["First name"] }}
{{ row["Last name"] }}
しかし解決法は_いかなる_CSVでもできるよう特定の列名でない方が好ましいです。
そこでrow
オブジェクトをfor
ループで反復処理します:
{% assign row = site.data.authors[0] %}
{% for pair in row %}
{{ pair | inspect }}
{% endfor %}
これにより、以下が生成されます。各ペアの最初のアイテムは_key_、二つ目は_value_です。
["First name", "John"]
["Last name", "Doe"]
["Age", "35"]
["Location", "United States"]
テーブルヘッダ行を作成
一つのテーブル行(tr
)にテーブルヘッダ(th
)タグのtableを作成しました。ヘッダ名はpair
の最初のエレメント(at index 0
)で見つけています。まだ必要でないため、二つ目のエレメントは無視しました。
<table>
{% for row in site.data.authors %}
{% if forloop.first %}
<tr>
{% for pair in row %}
<th>{{ pair[0] }}</th>
{% endfor %}
</tr>
{% endif %}
{% endfor %}
</table>
現時点では、2行目以降のコンテンツは表示されません。これは_first_行に対してtrueを返し、それ以外の場合はfalseを返すforloop.first
を使用しているためです。
tableデータ行の追加
このセクションではtableにデータ行を追加します。値を取得するためにpair
の二つ目のエレメントを使用します。
便宜上、tablerow
タグを使用してレンダリングします - これは for
ループのように機能しますが、内部データはtr
およびtd
HTMLタグでレンダリングされます。残念ながら、ヘッダー行に相当するものはないため、前のセクションと同様に、完全に書き出す必要があります。
---
title: Table test
---
<table>
{% for row in site.data.authors %}
{% if forloop.first %}
<tr>
{% for pair in row %}
<th>{{ pair[0] }}</th>
{% endfor %}
</tr>
{% endif %}
{% tablerow pair in row %}
{{ pair[1] }}
{% endtablerow %}
{% endfor %}
</table>
上記のコードで、次のようなTableが完成します。
First name | Last name | Age | Location |
---|---|---|---|
John | Doe | 35 | United States |
Jane | Doe | 29 | France |
Jack | Hill | 25 | Australia |
これでJekyllでCSVをHTML tableに変換できるようになりました。
Next steps
- Change the field names in the CSV.
- Choose a different CSV.
- Add CSS styling to your table.
- Render the table using a JSON or YAML input file.