2

私はここからサンプルコードに従っています: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クラスを使用するように指定するにはどうすればよいですか?

4

1 に答える 1

2

問題は、ドキュメントがこれら2つのコードブロック間でコンテキストを切り替えることです。使用している2番目の例のセットはRenderTemplateView、前のエントリのスケッチに「対応」することを意図したものではありませんListView

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

する必要があります:

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

これにより、関数が作成されます。この関数が呼び出されると、のインスタンスが作成され、CategoryViewそのdispatch_requestメソッドが呼び出されます。

于 2013-02-26T02:08:01.720 に答える