有什么办法可以解决“ project = Project.objects.get(pk = pk)”

时间:2019-07-31 17:21:06

标签: python django django-urls

为什么当我访问http://127.0.0.1:8000/project/1/时发生错误,提示DoesNotExist和 当我尝试http://127.0.0.1:8000/project/2/时,它没有任何错误。我认为问题出在urls.py或views.py

我的网址代码:

`

urlpatterns =[
url(r'^$', views.firstindex, name='firstindex'),
url(r'^(?P<pk>[0-9]+)/',views.project_detail, name='project_detail'),]

这是view.py

`def project_detail(request,pk):
project=Project.objects.get(pk=pk)
context={
    'project':project
}
return render(request,'project/detail.html')

1 个答案:

答案 0 :(得分:3)

  

我认为问题出在urls.pyviews.py

没有逻辑错误。 Model.objects.get(..)将引发错误(1)找不到给定过滤器的任何记录;或(2)可以找到给定错误的多个记录。 DoesNotExist因此表示它找不到具有该主键的Project。如果查看数据库,您可能会发现Project中没有id=1

在找不到此类项目的情况下,您可以使用get_object_or_404(..) function [Django-doc]返回HTTP 404,例如:

from django.shortcuts import get_object_or_404

def project_detail(request, pk):
    project = get_object_or_404(Project, pk=pk)
    context = {
        'project': project
    }
    return render(request, 'project/detail.html', context)

请注意,您忘记将context传递给render通话。