python - 在 httpresponseredirect 中反转时,基于类的视图不返回 httpresponse?
问题描述
我一直在尝试解决这个问题一段时间,但不知道我得到的错误消息是如何发生的。我收到此错误消息:
The view plan.views.PortfolioReportEdit didn't return an HttpResponse object. It returned None instead.
从查看代码来看,从我的角度来看,它似乎确实会在任何地方返回一个 httpresponse。
这是代码,首先是父类/超类:
class PortfolioEditBase(UpdateView):
post_req = False
url_name = 'plan:view_investment_profile'
def form_valid(self, form):
self.post_req = True
print "BASE: form_valid passed"
return super(PortfolioEditBase, self).form_valid(form)
def get_context_data(self, **kwargs):
context = super(PortfolioEditBase, self).get_context_data(**kwargs)
try:
context['post_req'] = self.post_req
context['profile_id'] = self.kwargs['profile_id']
print "BASE: gathered context data"
return context
except KeyError:
context['post_req'] = self.post_req
print "BASE: gathered context data"
return context
def get_success_url(self):
print "PortfolioEditBASE: in success_url"
return reverse(self.url_name, args=self.kwargs['profile_id'])
这是子类的代码:
class PortfolioDividendEdit(PortfolioEditBase):
model = Dividend
form_class = DividendForm
template_name = 'plan/portfolio/edit/dividend_edit.html'
print "PortfolioDividendEdit: Inside start of function"
def form_valid(self, form):
if "delete" in self.request.POST:
div_obj = Dividend.objects.get(id=self.kwargs['dividend_id'])
profile_id = div_obj.profile_id
div_obj.delete()
return HttpResponseRedirect(reverse('plan:view_investment_profile', kwargs={'profile_id': profile_id}))
def get_context_data(self, **kwargs):
print "Inside get_context_data dividend"
context = super(PortfolioEditBase, self).get_context_data(**kwargs)
dividend_obj = Dividend.objects.get(id=self.kwargs['dividend_id'])
profile = Profile.objects.get(id=dividend_obj.profile_id)
context['post_req'] = self.post_req
context['profile'] = profile
context['dividend_id'] = self.kwargs['dividend_id']
print "PortfolioDividendEdit: Returning context"
print "PortfolioDividendEdit: context: " + str(context)
return context
def get_object(self, queryset=None):
obj = Dividend.objects.get(id=self.kwargs['dividend_id'])
print "PortfolioDividendEdit: Returning object"
print "Object: " + str(obj)
return obj
def get_success_url(self):
print "PortfolioDividendEdit: Inside get_success_url"
dividend_obj = Dividend.objects.get(id=self.kwargs['dividend_id'])
profile_id = dividend_obj.profile_id
print "GET SUCCESS URL"
print self.url_name
print profile_id
return HttpResponseRedirect(reverse(self.url_name, args=[profile_id]))
根据 django 的说法,子类不返回 HttpResponse ,我无法弄清楚它为什么不这样做,因为我返回的 HttpResponseRedirect 里面有一个反向的,我虽然可以工作,但由于某种原因不是。
这是来自日志的打印行的输出:PortfolioEditReport: Returning object
PortfolioEditReport: object is: Earnings report
Not Found: /plan/portfolio/investment-info-reports/edit/css/style.css
[06/Aug/2018 15:16:00] "GET /plan/portfolio/investment-info-reports/edit/css/style.css HTTP/1.1" 404 8627
PortfolioEditReport: Gathered context data
[06/Aug/2018 15:16:00] "GET /plan/portfolio/investment-info-reports/edit/1 HTTP/1.1" 200 7112
PortfolioEditReport: Returning object
PortfolioEditReport: object is: Earnings report
Internal Server Error: /plan/portfolio/investment-info-reports/edit/1
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 198, in _get_response
"returned None instead." % (callback.__module__, view_name)
ValueError: The view plan.views.PortfolioReportEdit didn't return an HttpResponse object. It returned None instead.
[06/Aug/2018 15:16:02] "POST /plan/portfolio/investment-info-reports/edit/1 HTTP/1.1" 500 56676
它似乎永远不会执行 get_success_url ,最后一件事似乎是返回一个对象,仅此而已。
任何想法为什么这不起作用?
解决方案
推荐阅读
- ios - Apple 应用内购买和收据刷新
- acumatica - 通过端点的员工时间活动条目
- python - 写入文本文件时出现神秘的换行符
- android - Ionic 5 Capacitor:将通知注册用户组推送到firebase服务器/控制台?
- java - 修改 Hibernate 实体 onSave
- javascript - 有没有办法将 JSON 文件发布到 API?
- python - 对 SQLalchemy 结果的不合作的 For 循环进行故障排除
- macos - 从 CoreAudio HAL 插件写入磁盘
- javascript - JavaScript 解构对象
- angular - NgOnInit 中的变量未更新