找不到 Django 404 错误页面...当前路径与最后一个匹配

Posted

技术标签:

【中文标题】找不到 Django 404 错误页面...当前路径与最后一个匹配【英文标题】:Django 404 Error page not found...the current path matched the last one 【发布时间】:2021-08-04 21:29:33 【问题描述】:

我是 django 的新手,我正在玩自己的投票教程变体。我的应用程序运行良好,每个页面都正确加载。然后我做了一个改变;我创建然后删除了一个模型。现在,许多网址似乎都坏了。我不明白这个错误:

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8000/polls/1/pick/
Raised by:  polls.views.pick
Using the URLconf defined in mySite.urls, Django tried these URL patterns, in this order:

polls/ [name='index']
polls/ <int:pk>/ [name='detail']
polls/ <int:pk>/results/ [name='results']
polls/ <int:question_id>/vote/ [name='vote']
polls/ <int:question_id>/tally/ [name='tally']
polls/ <int:question_id>/pick/ [name='pick']
The current path, polls/1/pick/, matched the last one.

You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

所以我不明白为什么会这样说:当前路径 polls/1/pick/ 与最后一个匹配。

还找不到页面?这是如何运作的?当应用程序之前运行良好时,可能是什么导致了这种情况?

我的 urls.py:

from django.urls import path

from . import views

app_name = 'polls'

urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('<int:pk>/', views.DetailView.as_view(), name='detail'),
    path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
    path('<int:question_id>/vote/', views.vote, name='vote'),
    path('<int:question_id>/tally/', views.tally, name='tally'),
    path('<int:question_id>/pick/', views.pick, name='pick'),
    path('<int:pk>/video/', views.VideoView.as_view(), name='video'),
    path('<int:pk>/reveal/', views.RevealView.as_view(), name='reveal'),
]

和视图片段:

def pick(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    player = get_object_or_404(Player, pk=1)
    question.score = player.score
    question.save()
    return HttpResponseRedirect(reverse('polls:video', args=(question.id,)))

【问题讨论】:

【参考方案1】:

这一行的错误

Raised by:  polls.views.pick

告诉你由于没有找到匹配的 URL 而没有得到 404,你得到了 404 是因为你的视图函数 polls.views.pick 引发了 404。你在该函数中有两行可能引发 404

question = get_object_or_404(Question, pk=question_id)
player = get_object_or_404(Player, pk=1)

因此,在您的数据库中,您要么没有 pk=1 的问题,要么没有 pk=1 的玩家。

【讨论】:

会不会是别的?因为我确实有这两个......而且它以前工作得很好。还有其他功能也很奇怪,它们原本可以正常工作。当我在我的模型中创建一个完全不相关的新类时出现问题......然后将其删除。 好的...现在我在某个地方再次检查了一个玩家对象确实被删除了。不知道怎么做,但你是对的,谢谢!

以上是关于找不到 Django 404 错误页面...当前路径与最后一个匹配的主要内容,如果未能解决你的问题,请参考以下文章

找不到 Django 404 错误页面...当前路径与最后一个匹配

使用 Django,当我尝试访问应该存在的页面时,为啥找不到 404 错误页面?

URL 错误 404 找不到 Django 页面错误 x.html

Django:找不到页面(404)

如果在 django 中重置密码电子邮件链接错误,则找不到页面(404)错误

Django 1.9.0:找不到页面 404 Django 媒体文件