我创建了一个返回PDF的终点。
我有条件检查资产是否存在,但始终忽略该条件。如果条件不存在,则终点返回500
而不是404
,因为我想要
网址:
url(r'^report/asset/(?P<pk>[0-9]+)$', api.DemoPDFView.as_view()),
views.py
from easy_pdf.views import PDFTemplateResponseMixin, PDFTemplateView
class DemoPDFView(PDFTemplateView):
template_name = 'reports/asset.html'
pdf_filename = 'asset.pdf'
def get_context_data(self, **kwargs):
pk = kwargs['pk']
if not Asset.objects.filter(id=pk).exists():
Response(status=status.HTTP_404_NOT_FOUND)
else:
asset = Asset.objects.get(id=pk)
project = asset.project.name
id = asset.id
name = asset.title
return super(DemoPDFView, self).get_context_data(
pagesize='A4',
title='Asset',
project=project,
name=name,
id=id,
**kwargs
)
该插件可用:
http://django-easy-pdf.readthedocs.io/en/v0.2.0-dev1/
答案 0 :(得分:1)
由于您的代码不在视图本身中,而是在get_context_data()方法中,我想@schwobaseggl在评论中提到正确的方法是提高Http404异常。
from django.http import Http404 ... if not Asset.objects.filter(id=pk).exists(): raise Http404 else: ...
答案 1 :(得分:1)
更好的版本:
from django.shortcuts import get_object_or_404
asset = get_object_or_404(Asset, pk=pk)
如果Asset
不存在,它会自动引发404错误。
答案 2 :(得分:1)
虽然我建议使用@Eugene Morozov回答,但您当前代码的问题是您没有在if
if not Asset.objects.filter(id=pk).exists():
return Response(status=status.HTTP_404_NOT_FOUND)