Nikola を windows でやるぞ [2]
テンプレをみる
Nikola のテンプレは…少ない……。Jekyll とかに比べるとそりゃ、まあね。
nikola install_theme [theme name] でインストールできる。
[theme name] はここで探してちょ: Themes for Nikola
bootstrap3 系は、bootswatch のカスタムができる。Bootswatch: Free themes for Bootstrap
nikola bootswatch_theme -n [theme name] -s [theme name] -p [parent theme]
これで、サイトフォルダの templatesフォルダに theme name のテンプレが入る。ここで -n で保存するテンプレの名前を、-s で bootswatch のテンプレ対象を、 -p でこのテンプレの親テンプレを指定できる。たとえば、
nikola bootswatch_theme -n slate -s slate -p bootstrap3-jinja
とすれば、bootstrap3-jinja をテンプレとして、slate のデザインを適用するということになる。(bootstrap3-jinja は別途インストールする必要があるかも)
いじる準備
以上は、結局 bootstrap3 テーマの中で動き回っていただけのことで、実際にテーマを弄りたいなら直接親元を弄るしかない。
bootstrap3 系(bootstrap3-jinja も)は C:\Anaconda3\envs\nikola\Lib\site-packages\nikola\data\themes の中にあった。
とはいえ、ぶっ壊れると嫌なので(インストールし直せばいいだけだけど)、コピーして自分用のテーマを作っておいた(iukstrap3-jinja にした)。
みる
テーマの構造を知らんと動きようがないので調べる。
中身はこんな感じ:
├─assets │ ├─css │ │ └─images │ │ └─ie6 │ ├─fonts │ └─js │ └─colorbox-i18n └─templates
root に bundles, engine, parent があるけど、これはとりあえず無視で(中身見たら察せる程度)。
とりあえず目下重要なのは templates フォルダの中身で、これは .tmpl の塊。
nikola で最低限対応すべき(conf.pyにその設定項目があるという意味で?)なのは次の通り:
- base
- index
- archiveindex
- comments_helper
- crumbs
- slides
- gallery
- list
- list_post
- listing
- post
- post_list_directive
- story
- tag
- tagindex
- tags
多いな?!さきほど「最低限対応すべき」といったが、ちょ~シンプルなテーマ "bnw" では上のすべては定義されていない。
- base
- index
- archiveindex
- list
- list_post
- post
- tag
- tags
- zzz_footer
- zzz_header
- zzz_helper
最後の3つはオリジナルのテンプレだろう。実をいうと、bootstrap3-jinja でもフルに用意はされていない。
- base
- slides
- gallery
- listing
- post
- tags
- base_helper
- authors
bnw より少ない。どういうことかというと、Nikolaのテーマには継承システムがあるからのようだ。先程無視した parent に親テーマを指定することで、定義しなかったテンプレートについては親を辿ってくれるのだろう。(parent 先の base-jinja をちらっと見てみると山のように tmpl がありました。ヒィ)
ということで、新しくしたいところだけ新しくすればOK ということになる。とはいえ、それぞれがどういう役割をもっているのかを知らないといじれんので、簡単に見ていく。
base.tmpl
基本となるページレイアウト。オーバーライドしやすいように base_helper.tmpl, base_header.tmpl, base_footer.tmpl のパーツからなる。
index.tmpl
トップページのレンダリングに使われる。機能のいくつかは index_helper.tmpl にある。(公式には「マルチポストインデックスのレンダリングに使われる」とあるけど、多分そういうこと)
archieveindex.tmpl
ARCHIVES_ARE_INDEXES が True のとき、アーカイブ表示に使う。デフォルトだと index.tmpl を継承している。
comments_helper.tmpl
コメントを扱う。公式曰く「触らんほうがいよ :-)」。base-jinja には comment_helper_ほにゃほにゃ.tmpl というパーツがたくさんあった。
crumbs.tmpl, slides.tmpl
特定のUIアイテムをレンダリングするのを助ける。必要があれば微調整可。
gallery.tmpl
画像ギャラリーに使う。興味深いデータを含んでいる:
- post : ポストオブジェクト。ギャラリーでは
post.text()で表示される。 - crumbs : リンクのリスト。breadcrumbs を補うために。
- folders : フォルダのリスト。階層的なギャラリーナビを補うために。
- enable_comments : ギャラリーでのコメントの可否。
- thumbnail_size :
THUMBNAIL_SIZEのオプション。 - photo_array : 辞書のリスト:
list.tmpl
リンクの一般的なリストを表示するのに使う。items (text, link) 要素のリストがある。
list_post.tmpl
ポストの一般的なリストの表示。posts がある。
listing.tmpl
コードのリスティングの表示に使う。
post.tmpl
デフォルトでブログポストに使われる。Post クラスのインスタンスである post が得られる。いくつかの昨日は post_helper.tmpl と post_header.tmpl にある。
post_list_directive.tmpl
post_list reStructuredText directive で使われる(よくわからん)
story.tmpl
ポスト以外のページで使われる(要は pages)。ポストよりもすっきりしていて押し付けがましくないレイアウト。ポストとおなじパラメータをもつ。
tag.tmpl
単一のタグ/カテゴリのコンテンツを表すのに使う
tagindex.tmpl
TAG_PAGES_ARE_INDEXES が True の場合、単一のタグ/カテゴリのコンテンツを表すのに使う。デフォルトでは index.tmpl の単なる継承。
tags.tmpl
複数のタグ/カテゴリのリストの表示に使う。
I need a Not-A-Blog
というわけで、アドホックにはサイトのフォルダの /templates/ に上書きとして書けばいい。
とはいえ、Nikola はそもそもブログスタイルのサイトを生成してきやがるくれるので、おかゆの望む、ふつうのサイトとしてのレイアウトとしては少し微妙な感じがする。特に index.tmpl が。
おかゆとしては、index.tmpl でポストの一覧ではなく、カテゴリにわけたページの一覧を載せてくれたほうがいい。このあたりを最低限こしらえるためには…当たり前だけど、jinja2の知識が必要になる。