読者です 読者をやめる 読者になる 読者になる

ゆくゆくは有へと

おかゆ/オカ∃/大鹿有生/彼ノ∅有生 の雑記

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 にした)。

みる

テーマの構造を知らんと動きようがないので調べる。

getnikola.com

中身はこんな感じ:

├─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 : 辞書のリスト:
    • url : 画像本体のURL
    • url_thumb : サムネのURL
    • title : 画像のタイトル
    • size : サムネの大きさ。{w: XXX, h: XXX} の辞書。
    • photo_array_json : photo_array の json版。bootstrapテーマにおいて flowr.js で使われる。

list.tmpl

リンクの一般的なリストを表示するのに使う。items (text, link) 要素のリストがある。

list_post.tmpl

ポストの一般的なリストの表示。posts がある。

listing.tmpl

コードのリスティングの表示に使う。

post.tmpl

デフォルトでブログポストに使われる。Post クラスのインスタンスである post が得られる。いくつかの昨日は post_helper.tmplpost_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の知識が必要になる。