你能帮我用Django吗?我想了解一下执行顺序404页面找不到错误
让我把代码放在这里。..
www.example. com ------------来自django项目的文件
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import handler404, handler500
from core import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('core.urls')),
]
handler404 = views.error404
handler500 = views.error500
www.example. com ------------来自django app的文件
from django.urls import path
from .views import index
from .views import contact
from .views import product
urlpatterns = [
path('', index, name='index'),
path('contact', contato, name='contact'),
path('product/<int:pk>', produto, name='product'),
]
view.py
def produto(request, pk):
print(f'PK: {pk}')
prod = get_object_or_404(Product, id=pk)
context = {
'product': prod
}
return render(request, 'product.html', context)
def error404(request, exception):
template = loader.get_template('404.html')
return HttpResponse(content=template.render(), content_type='text/html; charset=utf8', status=404)
def error500(request):
template = loader.get_template('500.html')
return HttpResponse(content=template.render(), content_type='text/html; charset=utf8', status=500)
我想了解以下几点:假设在表“Product”中只有5个示例。..所以对于第5个示例,URL是http://127.0.0.1:8000/product/5
ok?
让我们假设我试图获取表中不存在的第10个示例,那么代码行prod = get_object_or_404(Product, id=pk)
将返回示例或返回错误404,在这种情况下将返回错误404,好吗?
因此,当我输入url http://127.0.0.1:8000/product/10
时,这将命中url模式path('product/<int:pk>', produto, name='product'),
,调用视图def produto(request, pk):
。在该视图中,将不会检索该示例,并将释放错误404。
那么,错误404是如何发送到 www.example.com ?我不明白执行流程是怎么运作的。有人能给我解释一下吗
我已经描述了上下文。
1条答案
按热度按时间5f0d552i1#
在到视图的路上,请求正在传递在设置上定义的所有中间件层。MIDDLEWARE和向后,同样适用于响应。就像洋葱的一层层。
在返回的过程中,如果视图或中间件层之一引发异常,则调用中间件方法process_exception()(https://docs.djangoprojectcom/en/4.2/topics/http/middleware/#process-exception)和40x等。处理程序被调用,反过来将异常转换为状态为40 x的HttpResponse返回给调用浏览器。 www.example.com