python - HttpResponseRedirect 在 Django 中不起作用
问题描述
HttpResponseRedirect 不起作用它显示错误,因为“上下文必须是 dict 而不是响应”
class FooterLinksView(TemplateView):
template_name = 'pages/footerlinks.html'
model = FooterLink
def get_context_data(self, **kwargs):
context = super(FooterLinksView,self).get_context_data(**kwargs)
string_name = self.kwargs['string']
obj = FooterLink.objects.get(link_url=string_name)
if obj.link_type == 'page':
try:
context['page_obj'] = obj
return context
except:
pass
else:
pass
print(obj.url_name)
return HttpResponseRedirect(str(obj.url_name))
解决方案
get_context_data()
是返回上下文的方法,所以它必须返回context
对象。如果要重定向,请在get()
.
像下面
类 FooterLinksView(TemplateView): template_name = 'pages/footerlinks.html' model = FooterLink
def get(self, request, *args, **kwargs):
string_name = self.kwargs['string']
obj = FooterLink.objects.get(link_url=string_name)
if obj.link_type != 'page':
return HttpResponseRedirect(str(obj.url_name))
else:
return super().get(*args, **kwargs)
# if python2
# return super(FooterLinksView, self).get(*args, **kwargs)
def get_context_data(self, **kwargs):
context = super(FooterLinksView,self).get_context_data(**kwargs)
string_name = self.kwargs['string']
obj = FooterLink.objects.get(link_url=string_name)
if obj.link_type == 'page':
try:
context['page_obj'] = obj
return context
except:
pass
return context
或者你可以只使用extra_context
in TemplateView
。
类 FooterLinksView(TemplateView): template_name = 'pages/footerlinks.html' model = FooterLink
def get(self, request, *args, **kwargs):
string_name = self.kwargs['string']
obj = FooterLink.objects.get(link_url=string_name)
if obj.link_type != 'page':
try:
self.extra_context = {
'page_obj': obj
}
except:
pass
return HttpResponseRedirect(str(obj.url_name))
else:
return super().get(*args, **kwargs)
# if python2
# return super(FooterLinksView, self).get(*args, **kwargs)
推荐阅读
- ios - 查询中的文档 ID 和排序依据引发错误 (Firestore)
- javascript - 使用 json 数据创建表
- php - 如何使用 PHP、AES 128 位加密和解密表 MariaDB 中的数据?
- javascript - React.js:如何在新选项卡中加载 App 组件?
- c# - 如何将 Stripe 支付网关集成到 ASP.NET MVC
- javascript - 将元素定位在可拖动图像的角落
- spring - 带有 JpaRepository 的 RestController 返回 javax.servlet.ServletException:处理程序没有适配器
- javascript - 在输入框内打开 HTML5 日期选择器点击
- terraform - 使用 Terraform Vsphere 提供程序从模板克隆期间无法获取正确的磁盘数据
- django - 如何在 Django 模板中编写查询