金字塔:自定义404页面返回为" 200 OK"

时间:2012-03-22 01:25:08

标签: python pyramid

我在Pyramid应用中定义了自定义404视图:

@view_config(context=HTTPNotFound, renderer='404.pt')
def not_found(self, request):
     return {}

它工作正常,除了与内容一起发送的HTTP状态代码是200 OK,这无论如何都不行。 403 Forbidden我遇到了同样的问题。如何让Pyramid发送正确的状态代码?

4 个答案:

答案 0 :(得分:19)

异常视图是一个单独的视图,为您提供了所需的任何内容。就像使用渲染器的任何视图一样,您可以通过request.response影响响应对象以修改其行为。渲染器然后填充身体。

@view_config(context=HTTPNotFound, renderer='404.pt')
def not_found(self, request):
    request.response.status = 404
    return {}

答案 1 :(得分:7)

实际上,在金字塔1.3中有一个新的装饰器@notfound_view_config。

@notfound_view_config(renderer = '404_error.jinja2')
def notfound(request):
    request.response.status = 404

答案 2 :(得分:0)

执行此操作的最佳方法是覆盖默认的未找到视图:

http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/hooks.html#changing-the-not-found-view

即使在这种情况下,您也需要返回状态为404的正确响应对象:

def notfound(request):
    return Response('Not Found, dude', status='404 Not Found')

从上面链接的页面中获取示例

答案 3 :(得分:0)

以下是如何在执行此操作时直接使用404挂钩并呈现模板的方法。

init .py:

config.add_notfound_view(not_found)

在你的view.py中:

from pyramid.view import notfound_view_config
from pyramid.renderers import render_to_response

def not_found(request):
    request.response.status = 404
    t = 'talk_python_to_me_com:templates/errors/404.pt'
    return render_to_response(t, {}, request)

我为Talk Python To Me做了这个:http://www.talkpythontome.com/,这是一个无效页面,可以看到自定义模板呈现。

http://www.talkpythontome.com/there_is_no_cat