Skip to main content
 首页 » 编程设计

python之为什么我的自定义 404 页面在 Django 中返回 '404 ok' 响应

2024年10月17日22落叶

我必须使用 django 呈现自定义 404 模板。 我决定从基础开始:

def custom_page_not_found(request): 
    response = render_to_response('404.html', {}, 
                              context_instance=RequestContext(request)) 
    response.status_code = 404 
    return response 

而且我很好奇为什么我不能有一个“404 not found”。如果我不使用 urls.py 中的 handler404,我将得到具有当前状态的空白 404 页面。 但当我想要一个自定义模板时就不行了。

有人知道为什么吗? (django 1.7.11)

请您参考如下方法:

在 Django 1.9+ 中,更改 status_code (例如 404)将改变 reason_phrase如果未设置(例如“未找到”)。但是,您使用的是旧版本的 Django,因此您必须手动更改 reason_phrase,否则它将保持“正常”状态。

创建响应时设置状态会更容易。

def custom_page_not_found(request): 
    return render_to_response('404.html', {}, 
                              context_instance=RequestContext(request), 
                              status=404) 

由于 render_to_response 快捷方式已过时,最好改用 render。

def custom_page_not_found(request): 
    return render(request, '404.html', {}, status=404)