【发布时间】:2021-07-03 02:21:12
【问题描述】:
更新:添加了我正在访问的引发错误的代码
对于我正在处理 wiki 页面的 CS50 项目,当用户键入 wiki/TITLE 中不存在的页面时,我尝试发送正确的自定义 404 错误,但是当我键入缺少的页面时, Django 抛出 500 而不是 404。这是一个常见错误还是我的错误消息错误? Debug 设置为 False,Allowed Hosts 在设置中配置为 ['*']:
这是我在 views.py 中的自定义错误处理程序:
def error_404(request, exception):
context = {}
response = render(request, 'encyclopedia/error_404.html', context=context)
response.status_code = 404
return response
def error_500(request):
context = {}
response = render(request, 'encyclopedia/error_500.html', context=context)
response.status_code = 500
return response
这是它们在 wiki/urls.py 中的样子:
from django.contrib import admin
from django.urls import include, path
from django.conf.urls import handler404, handler500
urlpatterns = [
path('admin/', admin.site.urls),
path('', include("encyclopedia.urls")),
]
handler404 = "encyclopedia.views.error_404"
handler500 = "encyclopedia.views.error_500"
这是 views.py 中我正在访问但要访问 wiki/C 的函数:
#function gets entry from index.html's <li>
def entry_page(request, entry):
name = entry # Places the title
print(f"checking the title: {entry}")
text = util.get_entry(entry) # Grabs the entry using the util function
html = md_converter(text)
if text is not None:
return render(request, "encyclopedia/entry.html", {
"title": name,
"entry": html
})
这是我的 urls.py:
from django.urls import path
from . import views
app_name = "encyclopedia"
urlpatterns = [
path("", views.index, name="index"),
path("wiki/<str:entry>", views.entry_page, name="entry"),
path("wiki/edit/<str:title>", views.edit, name="edit"),
path("search", views.search, name="search"),
path("random", views.random_page, name="random"),
path("create_entry",views.create_entry, name="create_entry")
]
这是终端显示的内容(我的 styles.css 出于某种原因抛出 404,但我没有更改任何内容......这是一个单独的问题):
【问题讨论】:
-
设置
DEBUG=True并尝试访问该页面。你会看到/wiki/C有什么问题 -
那个页面只是一个触发错误的例子,DEBUG True显示404就好了。我正在测试将 DEBUG 设置为 false 的 404 错误功能
-
将其更改为 true 并输入错误的 url 会抛出:“解码为 str:需要一个类似字节的对象,找到 NoneType”。那是什么?
-
是的,这是一个异常/错误,因此它应该显示 500 页,而不是 404
-
500 表示你的程序搞砸了。保持调试模式打开,直到您修复了异常的原因。您尚未提供导致错误的源代码部分,因此我们无法进一步帮助您。当您的代码了解到用户正在尝试访问一个不存在的页面(从您的错误中,可能使用类似
if foo is None的内容),提出django.http.Http404。