我被困住了,不明白為什么我的問(wèn)題來(lái)了:
- 我想返回上下文,如果對(duì)象存在,否則重定向到主頁(yè),并提出錯(cuò)誤Objects.DoesNotExist文件.
這是我的密碼:
Views
class PageDetail(TemplateView):
"""
Page View
"""
template_name = 'page_detail.html'
def get_context_data(self, **kwargs):
context = super(PageDetail, self).get_context_data(**kwargs)
try:
context['news'] = News.objects.filter(is_active=True).order_by('-date_created')[:4]
except:
pass
try:
context['page'] = Pages.objects.get(slug=kwargs.get('slug'), is_active=True)
except Pages.DoesNotExist:
return redirect('homepage')
return context
但我有個(gè)錯(cuò)誤:
raise TypeError('context must be a dict rather than %s.' % context.__class__.__name__)
TypeError: context must be a dict rather than HttpResponseRedirect.
告訴我你是否需要更多的信息
Thanks
我建議使用DetailView,而不是使用TemplateView。您可以以類似的方式重寫(xiě)get_context_data(),以傳遞額外的信息(新聞)。不需要傳遞“page”,因?yàn)檫@是DetailView為您設(shè)計(jì)的。
然后,如果找不到該頁(yè)面,您可以重寫(xiě)get()重定向到主頁(yè),而不是引發(fā)Http404錯(cuò)誤的默認(rèn)行為。
For example:
更新:您可以使用'context_object_name',以允許您引用模板中的頁(yè)面,而不是self.object,如下所示:
P、 如果您的模型被稱為Pages,那么將其稱為Page可能更有意義,因?yàn)椋ㄎ壹僭O(shè))每個(gè)實(shí)例都是一個(gè)單獨(dú)的頁(yè)面。