【问题标题】:FormView: View didn't return an HttpResponse objectFormView:视图没有返回 HttpResponse 对象
【发布时间】:2012-05-31 05:03:23
【问题描述】:

我知道这是由于视图的代码路径显然不返回HttpResponse 造成的。我是 django 新手,所以这可能是完全错误的。

这是 FormView 代码。我需要覆盖render_to_response吗?

class AddAdvertView(FormView):
    form_class = NewAdForm

    def get(self, *args, **kwargs):
            self.campaign = get_object_or_404(Campaign, id__exact = self.kwargs['campaign_id'])

    def post(self, request, *args, **kwargs):
            pass

    def get_form(self, form_class):
            return form_class(initial = {}, campaign = self.campaign)

    def get_success_url(self):
            return self.request.META.get('HTTP_REFERER', None)

    def form_valid(self, form):
            return HttpResponse('form valid')

    def form_invalid(self, form):
            return HttpResponse('form invalid')

【问题讨论】:

    标签: python django django-generic-views


    【解决方案1】:

    这可能是您在 get 方法中想要的:

     def get(self, *args, **kwargs):
         campaign = get_object_or_404(Campaign, id=self.kwargs['campaign_id'])
         ctx = self.get_context_data()
         ctx['campaign'] = campaign
         return self.render_to_response(ctx)
    

    如果你没有对post 做任何事情,你不应该有一个方法来覆盖它。同样,您不需要覆盖get_form

    基于类的视图在 django 中是新的,它们的文档与其他组件不相称;希望这会很快改变。目前,了解基于类的视图如何工作的最佳位置是查看它们的 mixin 提供了什么。

    对于FormView,mixin 是FormMixinProcessFormView

    【讨论】:

    • 感谢您的帮助。是的,我注意到缺少基于类的视图的文档。令人沮丧的是,如此好的解决方案却没有像这样记录不足。
    【解决方案2】:

    你应该从postget 方法返回一些东西,至少super(AddAdvertView, self).get(*args, **kwargs)。在您的代码中,get 刚刚创建了一个属性(尽管它应该返回一个空表单),而 post 什么也不做(尽管它应该处理该表单)。看来您根本不应该重新定义postget,并在dispatch 方法中检索您的活动(不要忘记调用super(AddAdvertView, self).dispatch(dispatch arguments)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-25
      • 2011-03-06
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多