首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django Rest框架-如果忽略条件

Django Rest框架-如果忽略条件
EN

Stack Overflow用户
提问于 2017-05-30 17:41:54
回答 2查看 762关注 0票数 1

我创建了一个返回PDF的端点。我有一个条件来检查资产是否存在,但是这个条件总是被忽略。如果条件不存在,端点将返回500,而不是我想要的404

网址:

代码语言:javascript
运行
复制
 url(r'^report/asset/(?P<pk>[0-9]+)$', api.DemoPDFView.as_view()),

views.py

代码语言:javascript
运行
复制
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
                   )

插件可供使用:

代码语言:javascript
运行
复制
http://django-easy-pdf.readthedocs.io/en/v0.2.0-dev1/ 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-30 19:38:31

更好的版本:

代码语言:javascript
运行
复制
from django.shortcuts import get_object_or_404
asset = get_object_or_404(Asset, pk=pk)

如果Asset不存在,它将自动引发404错误。

票数 2
EN

Stack Overflow用户

发布于 2017-05-31 08:36:05

虽然我建议使用@Eugene回答,但当前代码的问题是在if中不返回响应

代码语言:javascript
运行
复制
if not Asset.objects.filter(id=pk).exists():
    return Response(status=status.HTTP_404_NOT_FOUND)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44268624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档