我在Pyramid应用中定义了自定义404视图:
@view_config(context=HTTPNotFound, renderer='404.pt')
def not_found(self, request):
return {}
它工作正常,除了与内容一起发送的HTTP状态代码是200 OK,这无论如何都不行。 403 Forbidden我遇到了同样的问题。如何让Pyramid发送正确的状态代码?
答案 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)
执行此操作的最佳方法是覆盖默认的未找到视图:
即使在这种情况下,您也需要返回状态为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/,这是一个无效页面,可以看到自定义模板呈现。