我正在根据我在网上找到的教程使用 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 功能,例如缓存,并为每个视图和模板提供一些数据。