1. .Renderがよく分からないので整理する
HUGOのテーマを作成中ですが.Renderが良く分かりません。複雑なことをする予定はないのでこの機能を使わなくても困ることはないのだけれどせっかくの機会なので調べて試して整理しました。
.Renderで何ができるのか?partialと何が違うのか?使う必要はあるのか?と頭の中が?で一杯になっています。公式ドキュメントを読んでも具体的なことがあまり分からないんですよね。これは私の理解力に問題があるのかもしれませんが…。
-
公式ドキュメント
-
.Renderでできること
-
partialとの違い
-
結論
の順にご説明します。
2. 公式ドキュメント
まずは公式ドキュメントを確認します。
Takes a view to apply when rendering content.
コンテンツをレンダリングする際に適用するビューを取ります。
よく分かりません…。ビューについての説明も確認してみます。
The view is an alternative layout and should be a file name that points to a template in one of the locations specified in the documentation for Content Views.
This function is only available when applied to a single piece of content within a list context.
This example could render a piece of content using the content view located at /layouts/_default/summary.html:
ビューは代替レイアウトであり、コンテンツビューのドキュメントで指定されている場所のいずれかにあるテンプレートを指すファイル名でなければなりません。
この関数は、リストコンテキスト内の単一のコンテンツに適用された場合にのみ使用できます。
この例では、/layouts/_default/summary.html にあるコンテンツビューを使用してコンテンツをレンダリングしています。
…私には何が何なのか理解することができませんでした。無念です。
3. .Renderでできること
いろいろ試してみて.Renderでできることがおぼろげに見えてきました。
テンプレートを部品化できる
のです。言葉が正確では無いかもしれませんが私にとってそうなのです。
ここで一つ疑問が生まれます。
「partialも部品化だよね」
そうなのです。そしてこれも試してみたところ.Renderでもpartialでも同じようなことを実現できるのです。
さて何が違うのでしょうか?
4. partialとの違い
結論から述べますと、
.Renderの方がpartialよりも柔軟です。
-
partialはどこから呼び出しても同じ部品が呼び出されます
-
.Renderでは呼び出す部品を切り替えることができます
整理すると下記のようなイメージです。
{{ partial "render.html" . }}
-> partail/render.html
{{ .Render "render" }}
-> とある場合は post1/render.html -> とある場合は post2/render.html
このように.Renderはとある場合で呼び出すテンプレートを切り替えることができます。そしてこのとある場合がビューでセクションと同じようなものと考えて差し支えありません。
文章では説明が難しいので表にまとめてみました。事前準備として下記ファイルを作成しています。
-
layouts/post1/render.html
-
layouts/post2/render.html
-
layouts/partial/render.html
そして、呼び出しURL別×呼び出し方法別の表示結果の表が下記。
{{ .Render "render" }} | {{ partial "render.html" . }} | |
---|---|---|
/post1/ |
layouts/post1/render.html |
layouts/partial/render.html |
/post2/ |
layouts/post2/render.html |
layouts/partial/render.html |
.Renderなら呼び出しURLによって呼び出すテンプレートを切り替え可能なことが分かります。
5. 結論
.Renderのできることが分かり、partialとの違いも分かりました。私の理解不足と説明を簡略化したことから細かいところが間違っているかもしれませんが大枠的にはこんな感じです。
あまり複雑なことをしなければpartialだけでも事足りそうな気がします。実際に私にはpartialで問題なさそうです。
.Renderが難しいので理解して説明してみました。今回は以上です。