2013-02-25 44 views
0

我下面從這裏示例代碼:http://flask.pocoo.org/docs/views/#pluggable-views如何重複使用瓶可插拔查看和編輯代碼視圖

我不認爲這個代碼是完整的,我不能讓它工作,並建立在它。

我想重用代碼的下列功能:

添加數據庫條目

@app.route('/add/category/', methods=['GET', 'POST']) 
def addCategory(): 
    form = forms.AddCategory() 
    if form.validate_on_submit(): 
     name = form.name.data 
     database.addCategory(name) 
     return redirect('/view/categories/') 
    return render_template('add-category.html', form = form) 


@app.route('/add/revision/', methods=['GET', 'POST']) 
def addRevision(): 
    form = forms.AddRevision() 
    if form.validate_on_submit(): 
     name = form.name.data 
     version = form.version.data 
     database.addRevision(name, version) 
     return redirect('/view/revisions/') 
    return render_template('add-revision.html', form = form) 

編輯數據庫條目

@app.route('/edit/category/<category>', methods=['GET', 'POST']) 
def editCategory(category): 
    form = forms.AddCategory() 
    form.name.data = category 
    if form.validate_on_submit(): 
     newName = form.name.data 
     database.editCategory(name = category, newName = newName) 
     #view single category? 
     return redirect('/view/categories/') 
    return render_template('edit-category.html', category = category, form = form) 

@app.route('/edit/revision/<name>/<version>', methods=['GET', 'POST']) 
def editRevision(name, version): 
    form = forms.AddRevision() 
    form.name.data = name 
    form.version.data = version 
    if form.validate_on_submit(): 
     newName = form.name.data 
     newVersion = form.version.data 
     database.editRevision(name, version, newName, newVersion) 
     return redirect('/view/revisions/') 
    return render_template('edit-revision.html', name = name, version = version, form = form) 

這是我當前的代碼

class ListView(View): 
    def get_template_name(self): 
     raise NotImplementedError() 
    def render_template(self, context): 
     return render_template(self.get_template_name(), **context) 
    def dispatch_request(self): 
     context = {'objects': self.get_objects()} 
     return self.render_template(context) 

class CategoryView(ListView): 
    def get_template_name(self): 
     return 'categories.html' 
    def get_objects(self): 
     return models.Category.query.all() 

app.add_url_rule('/categories', view_func=RenderTemplateView.as_view('categories', template_name='categories.html')) 

我在哪裏指定使用app.add_url_rule中的CategoryView類?

回答

2

問題在於文檔在這兩個代碼塊之間切換上下文 - 使用RenderTemplateView的第二組示例並不意味着要與之前的條目一起繪製ListView

app.add_url_rule('/categories', view_func=RenderTemplateView # ... snip ... 

應該是:

app.add_url_rule('/categories', view_func=CategoryView.as_view("category")) 

creates a function其中,所謂將創建CategoryView的實例,並調用它的dispatch_request方法時。