【问题标题】:How to pass a value to a Pluggable View?如何将值传递给可插入视图?
【发布时间】:2013-02-26 15:09:09
【问题描述】:

我正在尝试实现一个模板,用于添加带有可插入视图的 VIEW、ADD 和 EDIT 网页。如何使用类似 url 的值?

这是我试图转换为可插入视图的代码。

@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)

可插入的查看代码

class ListView(View):

    def getTemplate_name(self):
        raise NotImplementedError()

    def render_template(self, context):
        return render_template(self.get_template_name(), **context)

    def dispatch_request(self):
        context = self.get_context()
        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()

    def get_form(self):
        return forms.AddCategory()

    def get_context(self):
        return {'categories': self.get_objects(), 'form': self.get_form()}

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

class EditCategory(ListView):

    def get_template_name(self):
        return 'edit-category.html'

    def get_form(self, category):
        form = forms.AddCategory()
        form.name.data = category
        return form

    def get_context(self):
        return {'form': self.get_form()}

app.add_url_rule('/edit/category/<category>', view_func=EditCategory.as_view('category'))

【问题讨论】:

    标签: python-2.7 flask


    【解决方案1】:

    您需要覆盖EditCategory 类中的dispatch_request 方法,因为该方法具有传递给它的url 值。

    class EditCategory(View):
    
        ...
    
        def get_context(self, category):
            return {'form': self.get_form(category)}
    
        def dispatch_request(self, category):
            context = self.get_context(category)
            return self.render_template(context)
    
    app.add_url_rule('/edit/category/<category>', view_func=EditCategory.as_view('category'))
    

    顺便说一句,我认为在这种情况下,您最好使用原始装饰视图函数,因为 viewCategoryeditCategory 功能之间几乎没有共同点

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 2021-08-31
      • 1970-01-01
      • 2013-06-17
      • 2020-11-08
      • 2013-12-19
      相关资源
      最近更新 更多