Web で見つけたチュートリアルに基づいて、Flask を使用してアプリケーションをセットアップしています。私が抱えている問題は、これまでのところ、作成したいビュー/ルートごとに多くのコードを作成する必要があるように思われるため、より良いシステムを考案しようとしていますが、各ステップを実際にテストする前にコードを書きすぎました。フレームワークに慣れていないため、迷ってしまいました。
だから私が欲しいのは、いくつかの定型的なものを抽出するベースビュークラスです。これが私のこれまでの試みです。
import jinja2
from jinja2 import Environment as Jinja2Environment
from webassets import Environment as AssetsEnvironment
from webassets.loaders import YAMLLoader
from webassets.ext.jinja2 import AssetsExtension
from flask import render_template
from app import app
class BaseView(object):
def __init__(self):
"init"
def get_jinja_env(self):
jinja_env = Jinja2Environment(loader=jinja2.FileSystemLoader('templates/'), extensions=[AssetsExtension])
return jinja_env
def get_asset_env(self):
asset_loader = webassets.YAMLLoader('conf/assets.yml')
asset_env = asset_loader.load_environment()
bundles = asset_loader.load_bundles()
[asset_env.register(name, bundle) for name, bundle in bundles.iteritems()]
return asset_env
def render_tmpl(self, tmpl_file, **context):
"Renders Jinja Template"
jinja_env = self.get_jinja_env
jinja_env.assets_environment = self.get_asset_env
template = jinja_env.get_template(tmpl_file)
return template.render(context)
BaseView から継承しようとするクラス
from app.BaseView import BaseView
from app import app
class HelloView(BaseView):
@app.route('/')
def respond(self):
self.render_tmpl('hello.html')
これの背後にある理由は、後でキャッシュなどの Jinja 機能を拡張し、すべてのビューとテンプレートでいくつかのデータを利用できるようにすることです。