我正在尝试找到一种在Pyramid应用程序中自定义错误消息(404,403)的方法。我找到了this doc,但目前还不清楚该怎么做。
我需要做什么来渲染其中一个模板(比如,templates / 404.pt)而不是标准的404消息。我在__init__.py
添加了以下内容:
from pyramid.config import Configurator
from pyramid.httpexceptions import HTTPNotFound
import myapp.views.errors as error_views
<...>
def main(global_config, **settings):
config = Configurator(settings=settings)
config.add_static_view('static', 'myapp:static')
config.add_route(...)
<...>
config.add_view(error_views.notfound, context=HTTPNotFound)
return config.make_wsgi_app()
error_views.notfound看起来像
def notfound(request):
macros = get_template('../templates/macros.pt')
return {
'macros': macros,
'title': "HTTP error 404"
}
当然它不起作用(在这种情况下如何指定模板名称?),甚至更多:它似乎根本没有被调用,而且它的代码被忽略了。
答案 0 :(得分:2)
将它放在myapp.views.errors文件中:
from pyramid.renderers import render_to_response
def notfound(request):
context['title'] = "HTTP error 404"
return render_to_response('../templates/macros.pt', context)
请告诉我这是否适合您。
答案 1 :(得分:2)
您应该将add_view作为pyramid.exceptions
例外的上下文传递,而不是pyramid.httpexceptions
例外。
这对我有用:
def main(global_config, **settings):
"""
This function returns a Pyramid WSGI application.
"""
...
config.add_view('my_app.error_views.not_found_view',
renderer='myapp:templates/not_found.pt',
context='pyramid.exceptions.NotFound')
答案 2 :(得分:2)
从Pyramid 1.3开始,使用@notfound_view_config
装饰器就足够了。现在无需在__init__.py
中设置任何内容。 views.py:
from pyramid.view import notfound_view_config
@notfound_view_config(renderer='error-page.mako')
def notfound(request):
request.response.status = 404
return {}