GenshiのTutorial3(Getting Started - Basic Template Rendering) 完成!!

遅くなりましたが、とりあえず、完成。用語がわからないものあったりするので、後で調べないと。。。突っ込みをお待ちしております。

週末に翻訳?(になっているのか。。。)できた内容を試してみよう。
なので、まだ、記載しているコードなどの動作確認はできていません。あしからずm(_ _)m

Basic Template Rendering(基本的なテンプレート解釈?)

So far the code doesn't actually use Genshi, or even any kind of templating.
今までのところ、コードは実際にGenshi、または少しのテンプレートも使用していません。

Let's change that.
それを変えましょう。

Inside of the geddit directory, create a directory called templates, and inside that directory create a file called index.html, with the following content:
gedditディレクトリの中で、以下の内容で、テンプレートと呼ばれているディレクトリをつくって、そのディレクトリ内でindex.htmlと呼ばれているファイルを作成してください:

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>$title</title>
  </head>
  <body class="index">
    <div id="header">
      <h1>$title</h1>
    </div>

    <p>Welcome!</p>

    <div id="footer">
      <hr />
      <p class="legalese">© 2007 Edgewall Software</p>
    </div>
  </body>
</html>

Note: make sure you're saving this file using UTF-8 encoding with your editor.
※エディタのUTF-8エンコーディング化を使用してこのファイルを必ず保存してください。

If for some reason you can't use UTF-8 (maybe you're using an outdated editor), replace the “©” character in the template with the corresponding character entity “©”.
UTF-8を使用できないなら(多分、あなたは時代遅れのエディタを使用しています)、テンプレートで"(c)"キャラクタを対応するキャラクタ実体と「コピー」に取り替えてください。

The same is true for all other template files in this tutorial.
このチュートリアル中の他のすべてのテンプレートファイルについて同じことが言えます。

This is basically an almost static XHTML file with some simple variable substitution: the string $title will be replaced by a variable of that name that we'll pass into the template from the controller.
これは、基本的にいくらかの単純な変数置換によるほとんど静的XHTMLファイルです:”$title”という文字列は、コントローラからテンプレートに渡される同名の変数の値と置き換えられるでしょう。:文字列$titleはコントローラーからテンプレートの変数名に置き換えられます。(逆?)

There are couple of important things to point out here:
注目すべき重要なポイントが2〜3つあります。

  • Variables substituted into templates, such as $title in our example, can be of any Python data type. Genshi will convert the value to a string and insert the result into the generated output stream.

私たちの例における$titleのようなテンプレートへ代用された変数は、任意のPythonのデータ型になりえます。Genshiは値をストリングに変換し、生成された出力ストリームに結果を挿入するでしょう。

  • You generally do not need to worry about XML-escaping such variables. Genshi will automatically take care of that when the template is serialized. We'll look into the details of this process later.

通常、そのまま変数につかえない場合の文字のXMLエスケープについて心配する必要はありません。
テンプレートがシリアライズされるとき、Genshiは自動的にそれを管理するでしょう。
後でこのプロセスの詳細の中を検証します。

  • The template will be parsed by Genshi using an XML parser, which means that it needs to be well-formed XML. If you know HTML but are unfamiliar with XML/XHTML, you will need to read up on the topic. Here are a couple of good references:

テンプレートは、XMLパーサ(整形式のXMLであることが必要であることを意味する)を使用することでGenshiによって構文分析されるでしょう。 あなたがHTMLを知っているが、XML/XHTMLを良く知らないな、研究する必要があるでしょう。ここに、2、3の良いリファレンスがあります:

  • Just because the template uses XHTML does not mean that our web-application should generate XHTML! While that is possible, you can also choose to generate good old HTML 4.01, because, despite all the hype, that's still the format that works best in most browsers (see this blog post over at Surfin' Safari for some background).

テンプレートにXHTMLを使うとは言っても、それがすなわち「Genshi製アプリケーションは必ずXHTMLを吐かなくちゃならん!」と言う事を意味するわけではありません。どんな流言飛語にも関わらず、未だに古き良きHTML4.01はほとんどのブラウザで一番まともな動作をするフォーマットなので、それを生成する選択肢もあります。

テンプレートが使うXHTMLが意味をなさないなら、我々のウェブアプリケーションはその間に実行できるXHTMLを作り出さないといけません。誇大広告にもかかわらず、それがまだ大部分のブラウザ(多少の背景のためにSurfin' Safariでもう一度メッセージを見ます)で最も働くフォーマットであるので、あなたは古いHTML 4.01を作り出すほうを選ぶこともできます。(アヤシイーー)

We now need to change the controller code so that this template is used. First, add the Genshi TemplateLoader to the imports at the top of the geddit/controller.py file, and instantiate a loader for the geddit/templates directory:
このテンプレートが使用されるように、私たちは今コントローラー・コードを変更する必要があります。最初に、, and instantiate a loader for the geddit/templates directory:
、”geddit/templates”(#ここはディレクトリ名なんで訳さない方がいいかもしれないとか思ったり)ディレクトリを読込む為に、ローダオブジェクトを生成します。
# instantiateってどう訳せばいいんだろうといつも思います。(実体化?初期化?インスタンス化?実効化?)
geddit/controller.pyファイルの一番上のimportにGenshi TemplateLoaderを加えて、geddit/テンプレート・ディレクトリーのためのローダーを実証してください:

import cherrypy
from genshi.template import TemplateLoader

loader = TemplateLoader(
    os.path.join(os.path.dirname(__file__), 'templates'),
    auto_reload=True
)


Next, change the implementation of the index() method of the Root class to look like this:
ルートクラスのindex関数を次のように実装を変更します。

    @cherrypy.expose
    def index(self):
        tmpl = loader.load('index.html')
        return tmpl.generate(title='Geddit').render('html', doctype='html')

This asks the template loader for a template named index.html, generates the output stream, and finally serializes the output to HTML. When you now reload the page in your browser, you should get back the following HTML response:
これはindex.htmlという名のテンプレートをテンプレート・ローダーに尋ねて、出力ストリームを生成し、最後にHTMLへの出力を連続させます。今ブラウザ中のページに再びロードする場合、次のHTMLレスポンスを戻すべきです:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>Geddit</title>
  </head>
  <body class="index">
    <div id="header">
      <h1>Geddit</h1>
    </div>
    <p>Welcome!</p>
    <div id="footer">
      <hr>
      <p class="legalese">© 2007 Edgewall Software</p>
    </div>
  </body>
</html>

Note that the output has some subtle differences compared to the template, even beyond the variable substitution that has taken place: Genshi has added a proper HTML DOCTYPE (important to get the browser to render using standards mode, through a commonly employed mechanism in web browsers called “doctype switching”.)
テンプレートと比して出力がちょこっとだけ変化していますが、被置換変数が置き換わっていると共に、適切なHTML DOCTYPEが追加されている事に注目してください。(これは一般的にブラウザに搭載されている「DOCTYPE(による標準/互換)モード切り替え」機能を通じて、ブラウザに標準モードでレンダリングしてもらう為に重要な事です)


※出力には、起こった変数置換を越えてさえ、テンプレートと比較してなんらかの微妙な違いがあるために:Genshiは、適当なHTML DOCTYPEを加えました(ブラウザーに標準モードを使用することを生成させるために重要で、終わりまで、ウェブブラウザの一般に使用されたメカニズムはgdoctypeをswitchinghと呼ばれました。)(アヤシイーーー)


It has also removed the XHTML namespace declaration, because we're rendering to HTML, and HTML doesn't support XML namespaces.
また、私たちがHTMLを提供していて、HTMLがXML名前空間をサポートしないので、それはXHTML名前空間宣言を取り除きました。


And the <hr> element in the footer is missing the trailing slash that can be used in XML markup for empty elements; HTML user agents know that <hr> is always an empty element, and including either the trailing slash, or even adding an explicit</hr> end tag would be invalid and might even confuse some browsers.
フッタの<hr>要素から、”XML”において空要素を示す、後ろの/が消えています。(”HTML”のUAは<hr>が常に空要素であることを知っており、それには後ろの/が既に含まれている事も同様に知っています。また、明示的に</hr>閉じタグをつける事は正しくないですし、一部のブラウザを混乱させてしまうでしょう)

そして、<hr>フッタの要素は、空の要素のためにXMLマークアップにおいて使い道があるスラッシュをはずしています;HTMLユーザーエージェントは、その<hr>要素はで常に空であることを知っています そして、どちらか一方のスラッシュを含む、または明確な</hr> Endタグは無効として扱うことで、多少のブラウザーを混乱させるかもしれません(アヤシイーーー)