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

Blogを作る(7)表示関連の修正

Pylons

本文にmarkdown記法を使う

 本文に、何らかのマークアップ記法(reST, markdown, textile, hatena)が使えないと寂しいので、これを改善します。
 Pylonsをインストールすると、webhelpers.markdown, webhelpers.textileというモジュールも同時にインストールされるので、ここではこのmarkdownを使うことにしました。


 どうやってmarkdownを呼び出すかは、いろいろな選択肢があると思いますが、モデル・インスタンスのメソッドとして実装することにします。blogtutorial/models/__init__.pyを修正します。

class Post(object):
    def as_markup(self):
        from webhelpers.markdown import markdown
        return markdown(self.content, encoding='utf-8')

 対応するテンプレート(detail.myt)からこのメソッドを呼び出します。

<div class="content">
<% c.entry.as_markup() %>
</div>

アプリケーション共通の設定

 起動時に読み込まれるiniファイルにアプリケーション共通の設定を記述しておくことができるので、これを利用して、Blogのタイトルやサマリーを設定しておきます。

 development.iniの[app:main]のセクションに、次の設定を追加しました。

[app:main]
blog.title = Pythonを極めて犬を飼うブログ
blog.summary = Pythonについて書くよ

 テンプレートからは、request.environ['paste.config']['app_conf'][key]で参照することができます。

<div id="header">
<h1><% request.environ['app_conf']['blog.title'] | h %></h1>
<p><% request.environ['app_conf']['blog.summary'] | h %></p>

 頻繁に使う値ならば、blogtutorial/lib/app_global.pyに定義されているGlobalオブジェクトを通して参照できるようにしておくと良いと思います。
 今は、development.iniから設定を読み込んでいますが、このアプローチをとれば、あとでブログの設定をデータベースに保存するようにした場合に、テンプレートの変更を行わなくても済みそうです。

class Globals(object):
    def __init__(self, global_conf, app_conf, **extra):
        self.blog_title = app_conf['blog.title']
        self.blog_summary = app_conf['blog.summary']
   

 テンプレート側からは、次のように参照します。

<div id="header">
<h1><% g.blog_title | h %></h1>
<p><% g.blog_summary | h %></p>

 こんな感じの表示内容になりました。

スタイルシートを適用する

 プロジェクトのパッケージディレクトリ/public以下にファイルを置くと、静的なファイルとして配信することができます。ここに、blogtutorial/public/style/base.cssとしてスタイルシートを用意しました。
 スタイルシートのlinkタグは、stylesheet_link_tag関数を使うと便利です。次の一行をblogtutorial/templates/autohandlerに追加します。

<% h.stylesheet_link_tag('/style/base.css') %>