我创建了一个返回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/
发布于 2017-05-30 19:38:31
更好的版本:
from django.shortcuts import get_object_or_404
asset = get_object_or_404(Asset, pk=pk)
如果Asset
不存在,它将自动引发404错误。
发布于 2017-05-31 08:36:05
虽然我建议使用@Eugene回答,但当前代码的问题是在if
中不返回响应
if not Asset.objects.filter(id=pk).exists():
return Response(status=status.HTTP_404_NOT_FOUND)
https://stackoverflow.com/questions/44268624
复制相似问题