2016-11-10 69 views
2

我必须用django渲染一个自定义的404模板。 我决定开始在它的基础:为什么我的自定义404页面在Django中返回'404 ok'响应?

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

而且我很好奇,想知道我为什么不能“404未找到”。如果我没有使用urls.py中的handler404,那么我将获得空白404页面的当前状态。 但不是当我想有一个自定义模板。

有谁知道为什么? (Django 1.7.11)

+0

如果您只想为404页面使用自定义模板,则不需要设置“handler404”或创建自定义视图。只需将您的'404.html'模板粘贴到您的模板目录中即可。 – Alasdair

+0

谢谢你的评论。但是,如果我需要为任何目的使用自定义视图,我不能有一个正确的'404未找到'http响应? –

+0

当然可以。但是你的问题很混乱。没有“404好”这样的东西,你是说它回来了“200好”吗? –

回答

2

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

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

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) 
+0

男人,你是我一天中的阳光(伦敦天气)。我被困在这里很久了。 非常感谢! –