2012-11-19 24 views
0

我使用Flask根據我在網上找到的教程設置了一個應用程序。我遇到的問題是迄今爲止,似乎我將不得不爲每個視圖/路線編寫大量代碼,所以我正在試圖設計一個更好的系統,但我認爲我挖掘到了一個洞,在那裏我在真正測試每一步之前寫了太多的代碼,因爲我不熟悉框架im kindof lost。爲Flask設置通用視圖類

所以我想要的是一個基礎視圖類,將提取一些樣板材料。這是我迄今的嘗試。試圖從基本視點

from app.BaseView import BaseView 
from app import app 

class HelloView(BaseView): 

    @app.route('/') 
    def respond(self): 
     self.render_tmpl('hello.html') 

繼承我這背後的推理

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) 

類是後來我打算延長一些神社的功能,如高速緩存,並有一些數據可用於每個視圖和模板。

回答

1

您將要使用包含在燒瓶中的View classes

由於他們很好地解釋了這裏沒有多少我可以解釋。只讀通過文檔,我想你會看到,你將不得不做的(燒瓶文檔是真棒。)

如果你想緩存你也可能想看看Flask-Cache

0

這並不完全回答你的問題,但我認爲這值得一提。

你可以「出口」變量到神社環境全局:

app.jinja_env.globals['data'] = ['One', 'Two', 'Three'] 

一旦你做到了這一點,所有的模板已經訪問了data變量,就好像它是通過傳遞可以在其上運行kargs。你並不需要爲創建一個全新的視圖課程而煩惱。你可以只處理一次,然後在任何地方使用。這對於側邊欄和登錄狀態以及什麼都很方便。

+0

非常感謝。 – BillPull

相關問題