20 Minute Wiki Page 2

データベースを指定する

TurboGears?は最低限のことしか要求しませんが、TurboGearsはどこにデータベースがあるかを知る必要があります。クイックスタートは2つの簡単な設定ファイルを生成してくれます。

もしsqliteをインストールしてあるなら、特に設定することなく開発を始めることができます。(このセクションの残りはスキップしてください。)

我々は製品展開環境ではなく開発環境にいるので、 "dev.cfg" を編集します。あなたのデータベースに対応したsqlobject.dburiの行のコメントアウトを外して、正しい接続情報を与えるようにするだけです。

control-Cを押して再び起動スクリプトを実行してウェブサーバを再起動しましょう:

python start-wiki20.py

データベースの作成

Pythonコードでデータベースのスキーマを作成し、TurboGearsにデータベースの場所を教えたので、実際に作る準備は整いました:

tg-admin sql create

この "tg-admin sql" コマンドは、SQLObjectにおけるsqlobject-adminコマンドのラッパーです。これがデータベースを探す設定ファイルを見ています。

Wikiページを表示しよう!

信じられないかもしれませんが、既にページを表示する準備はできています。最初のステップはテンプレートの名前を変えることです。OSのコマンドを使って "welcome.kid" の名前を変えましょう:

cd wiki20/templates
mv welcome.kid page.kid
cd ../..

ここでWikiページに適切なようにテンプレートのbodyを置換します:

<div style="float:right; width: 10em">
    Viewing <span py:replace="page.pagename">Page Name Goes Here</span>
    <br/>
    You can return to the <a href="/">FrontPage</a>.
</div>

<div py:replace="XML(data)">Page text goes here.</div>

page.kidはブラウザで開いてきちんと見ることができることに注意してください。このプレースホルダーテキストはアクションを与える前にレイアウトを確認するのに本当に役に立ちます。

TurboGears?はあなたが書かなければならないコードの量を激減してくれますが、それを無くしてくれるわけではありません。controllers.pyに2つのimportを追加しましょう:

from wiki20.model import Page
from docutils.core import publish_parts

そしてindexメソッドを次のように書き換えます:

  1. テンプレートの名前を "page" にします(1行目)
  2. デフォルトのページの名前を "FrontPage" にします(2行目)
  3. データベースからページを引き出します(3行目)
  4. テキストをHTMLとしてフォーマットします(4行目)
  5. unicodeを正しく扱います(これは良い習慣です。5行目)
  6. テンプレートにデータを返します(6行目)

以下が新しいindexメソッドです:

@expose("wiki20.templates.page")
def index(self, pagename="FrontPage"): 
    page = Page.byPagename(pagename)
    content = publish_parts(page.data,
                            writer_name="html")["html_body"]
    return dict(data=content, page=page)

全部で6行、非常に読みやすいです。最後で返している辞書はテンプレートを挿入し、また後で見るような魔法の力を持っています。テンプレートの名前の最初にある "." はこれがコントローラに対する相対名であることを意味しています。言い換えれば、 "wiki20.templates.page" というフルネームを参照していることになります。

もしあなたがこのページにアクセスするときにpublish_partsの行で KeyError? を受け取ったなら、docutilsの古いバージョンを使っているのでしょう。最新バージョンにアップグレードしてください。

Go back to page 1 | Continue on page 3