我想在金字塔应用中展示我喜欢的404页面,但可以让它运行起来。在阅读了关于这个主题的各种魔术文本之后,我在我的代码中添加了这样的东西:
cfg.add_view( "Page_not_found_view", renderer="page_404.mak",
context=HTTPNotFound )
但是当我的* Page_not_found_view *处理程序被调用时(我可以看到它的'跟踪)我仍然得到那个可怜的“默认”404页面,而不是*我自己的page_404.mak *。有什么想法吗?
答案 0 :(得分:3)
这是一个示例应用程序,当没有找到匹配的视图时,使用异常视图来捕获Pyramid引发的pyramid.httpexceptions.HTTPNotFound视图:
from waitress import serve
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('<html><body>Hello world!</body></html>')
def notfound(request):
return Response('<html><body>Not found!</body></html>')
if __name__ == '__main__':
config = Configurator()
config.add_view(hello_world)
config.add_view(notfound, context='pyramid.httpexceptions.HTTPNotFound')
app = config.make_wsgi_app()
serve(app, host='0.0.0.0')
访问'/'将返回“Hello world!”,访问“/ abc”或“/ def”(或其他任何未找到的内容)将返回“Not found!”。
答案 1 :(得分:2)
在大多数情况下,@ chris-mcdonough所写的内容应该有用。但是,如果您在视图中使用matchdict可调用并且想要在没有匹配时显示自定义404页面,请确保引发HTTPNotFound
异常而不是返回它。否则,您将获得默认的404页面。
示例:
from pyramid import httpexceptions
def my_page(self):
id = self.request.matchdict.get('id', None)
if not id:
raise httpexceptions.HTTPNotFound()
else:
# do whatever here