ブログの雛形。
成果物
前提
あとは一覧される単一ページをつくるだけ。ついでによくある前後記事へのリンクもつくる。
流れ
/blog/page.html
を追加する/blog/2021-08-01.md
を追加する
1. /blog/page.html
を追加する
- 端末で
$SITE_ROOT
へ移動する templates/blog
に移動するtouch page.html
する
templates/blog/page.html
<html> <body> <h1>{{ page.title }}</h1> <p>{{ page.description }}</p> {{ page.content | safe }} <nav class="pagination"> {% if page.earlier %}<a class="previous" href="{{ page.earlier.permalink }}">‹ {{ page.earlier.title }}</a>{% endif %} {% if page.earlier and page.later %} {% endif %} {% if page.later %}<a class="next" href="{{ page.later.permalink }}">{{ page.later.title }} ›</a>{% endif %} </nav></aside> </body> </html>
上部は前回とおなじ。ポイントは下部。前記事と次記事へのリンクをつくっている。
変数の意味は以下。
tera | データ元 | 概要 |
---|---|---|
{{ page.title }} |
*.md のフロントマターtitle |
タイトル |
{{ page.description }} |
*.md のフロントマターdescription |
説明 |
{{ page.content }} |
*.md の内容 |
MarkdownをHTMLに変換したテキスト |
{{ page.permalink }} |
*.md のファイル名 |
URL |
自分のページからみた前後にあるページを取得できる。
tera | データ元 | 概要 |
---|---|---|
{{ page.earlier }} |
*.md |
このページよりひとつ前のページ |
{{ page.later }} |
*.md |
このページよりひとつ後のページ |
{{ page.content | safe }}
の| safe
はフィルタという概念。Linuxコマンドのそれとおなじでデータ加工する。今回のそれはMarkdownで書かれた内容のHTMLを{{ page.content }}
で取得し、それをsafe
フィルタに渡してそのままHTMLとして出力する。もしsafe
フィルタにかけなければエスケープ(サニタイズ)されてただのテキストとして出力されてしまう。
{% if %}
, {% for %}
の構文がある。これはプログラミング言語のそれとおなじ。
tera | 概要 |
---|---|
{% if 条件 %} |
条件を満たしたときだけ実行する |
{% for 変数 in 配列 %} |
ループする。(loop.index で添字が取得できる) |
2. /blog/2021-08-01.md
を追加する
あとはMarkdownで記事を書くだけ。
+++ title = "タイトル0801" description = "説明0801" date = 2021-08-01T00:00:00 +++ # 見出しA 本文A。 # 見出しB 本文B。
同様に以下のページも作っておく。
/blog/2021-07-30.md
/blog/2021-07-31.md
3. zola build
する
- 端末で
$SITE_ROOT
へ移動する zola build
するpublic/
にblog/index.html
ができるpublic/
にblog/2021-08-01/index.html
ができる
public/blog/index.html
<html> <body> <h1>ブログ</h1> <ul> <li><a href="https://example.com/blog/2021-08-01">タイトル0801</a></li> <li><a href="https://example.com/blog/2021-07-31">タイトル0731</a></li> <li><a href="https://example.com/blog/2021-07-30">タイトル0730</a></li> </ul> </body> </html>
public/blog/2021-07-30/index.html
<html> <body> <h1>タイトル0730</h1> <p>説明0730</p> <h1>見出しA</h1> <p>本文A。</p> <h1>見出しB</h1> <p>本文B。</p> <a href="https://example.com/blog/2021-07-31">タイトル0731 ›</a> </body> </html>
public/blog/2021-08-01/index.html
<html> <body> <h1>タイトル0731</h1> <p>説明0731</p> <h1>見出しA</h1> <p>本文A。</p> <h1>見出しB</h1> <p>本文B。</p> <a href="https://example.com/blog/2021-07-30">‹ タイトル0730</a> <a href="https://example.com/blog/2021-08-01">タイトル0801 ›</a> </body> </html>
public/blog/2021-08-01/index.html
<html> <body> <h1>タイトル0801</h1> <p>説明0801</p> <h1>見出しA</h1> <p>本文A。</p> <h1>見出しB</h1> <p>本文B。</p> <a href="https://example.com/blog/2021-07-31">‹ タイトル0731</a> </body> </html>
所感
おつかれさま。ここまでできればブログをつくれるはず。
ただ、テンプレートがDRYに書けていないことに気づいただろう。teraにはそれを解決するinclude
, macro
(import
), extends
などがある。これらについて学習したい。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- zola 0.14.0
$ uname -a Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux