【问题标题】:Raising Http404 in Django在 Django 中引发 Http404
【发布时间】:2021-07-05 10:55:24
【问题描述】:

我有以下路径:

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 是数据库中不存在的一周。由于某种原因,上面的代码返回了一个DoesNotExist 错误,而不是实际的404 页面。我假设那行代码是我提出的404 页面没有被击中。对吗?

【问题讨论】:

  • 您有两次对.get 的调用,其中第一个不在try-except 块week = Week.objects.get(pk=week_id)...

标签: python django http-status-code-404


【解决方案1】:

您需要将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)

【讨论】:

  • NP。与 Django 玩得开心!它摇摆不定。
猜你喜欢
  • 1970-01-01
  • 2011-12-04
  • 2012-08-24
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2021-07-09
  • 2015-06-25
  • 1970-01-01
相关资源
最近更新 更多