mod_wsgi を介して Apache で Python 3.2 をセットアップしました。シンプルな「Hello World」Webページを提供するCherryPy 3.2があります。サイトを構築する際に、Jinja2 を使用してテンプレートを作成したいと考えています。私は Python を初めて使用するので、Python、CherryPy、または Jinja についてあまり知りません。
以下のコードを使用して、サイト ルート ( /
) と製品ページ ( /products
) を基本的なテキストと共に読み込むことができます。これで少なくとも、Python、mod_wsgi、および CherryPy がある程度適切にセットアップされていることがわかります。
サイトには多くのページがあるため、各ページ ハンドラー クラスでテンプレートを宣言してレンダリングする必要がないように、Jinja テンプレートを実装したいと考えています。私が知る限り、これを行う最善の方法は、次の例のように PageHandler をラップすることです。
- http://docs.cherrypy.org/dev/concepts/dispatching.html#replaceing-page-handlers
- http://docs.cherrypy.org/stable/refman/_cptools.html#cherrypy._cptools.HandlerWrapperTool
2 番目の例のコードを実装しましたが、何も変わりません。
[コード後の詳細]
wsgi_handler.py -いくつかのチュートリアルとサンプルのマッシュアップ
import sys, os
abspath = os.path.dirname(__file__)
sys.path.append(abspath)
sys.path.append(abspath + '/libs')
sys.path.append(abspath + '/app')
sys.stdout = sys.stderr
import atexit
import threading
import cherrypy
from cherrypy._cptools import HandlerWrapperTool
from libs.jinja2 import Environment, PackageLoader
# Import from custom module
from core import Page, Products
cherrypy.config.update({'environment': 'embedded'})
env = Environment(loader=PackageLoader('app', 'templates'))
# This should wrap the PageHandler
def interpolator(next_handler, *args, **kwargs):
template = env.get_template('base.html')
response_dict = next_handler(*args, **kwargs)
return template.render(**response_dict)
# Put the wrapper in place(?)
cherrypy.tools.jinja = HandlerWrapperTool(interpolator)
# Configure site routing
root = Page()
root.products = Products()
# Load the application
application = cherrypy.Application(root, '', abspath + '/app/config')
/アプリ/構成
[/]
request.dispatch: cherrypy.dispatch.MethodDispatcher()
コア モジュール クラス
class Page:
exposed = True
def GET(self):
return "got Page"
def POST(self, name, password):
return "created"
class Products:
exposed = True
def GET(self):
return "got Products"
def POST(self, name, password):
return "created"
Google グループで読んだ内容に基づいて、Jinja ツールを「有効にする」必要があるかもしれないと考えたので、構成を次のように更新しました。
/アプリ/構成
[/]
tools.jinja.on = True
request.dispatch: cherrypy.dispatch.MethodDispatcher()
構成を更新した後、サイトのルート ページと製品ページに、CherryPy によって生成されたエラー ページ「500 内部サーバー エラー」が表示されます。詳細なエラー メッセージはログに見つかりません (少なくとも、私が認識しているログにはありません)。
プレインストールされていない限り、そこにあるJinja ツールが必要になることはわかっていますが、どこに配置すればよいか、有効にする方法がわかりません。それ、どうやったら出来るの?
私はこれを正しい方法で行っていますか、それとももっと良い方法がありますか?
編集(2012 年 5 月 21 日):
私が使用しているJinja2テンプレートは次のとおりです。
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>