在 Django 中提高 Http404

Raising Http404 in Django

我有以下路径:

path("polls/<int:week_id>/vote/", views.vote, name="vote")

而在我看来,我写了下面的方法:

def vote(request, week_id):
  week = Week.objects.get(pk=week_id)
  try:
    selected_choice = week.choice_set.get(pk=request.POST["choice"])
  except Week.DoesNotExist:
    raise Http404("Poll for said week does not exists")
  else:
    selected_choice.votes += 1
    selected_choice.save()
    return redirect("results", week_id)

我正在尝试在用户导航到 polls/123/vote 时显示一个 404 页面,其中 123 是数据库中不存在的一周。出于某种原因,上面的代码 returns 出现了 DoesNotExist 错误,而不是实际的 404 页面。我假设我正在提升 404 页面的那行代码没有被点击。是吗?

您需要将 week 向下移动到 try 块中:

def vote(request, week_id):
  try:
    week = Week.objects.get(pk=week_id)
    selected_choice = week.choice_set.get(pk=request.POST["choice"])
  except Week.DoesNotExist:
    raise Http404("Poll for said week does not exists")
  else:
    selected_choice.votes += 1
    selected_choice.save()
    return redirect("results", week_id)