2012-02-14 16 views
0

ピラミッドのアプリで私の気の利いた404ページを表示したいが、それを動作させることができる。テーマについて様々な魔法の文章を読んだ後、私は私のコードでは、このようなものを置く:私のカスタム404ページが機能しない(ピラミッドのフレームワーク)

cfg.add_view("Page_not_found_view", renderer="page_404.mak", 
       context=HTTPNotFound) 

しかし、私の*のPage_not_found_viewは*ハンドラが呼び出されている間、私はまだその貧しい 『デフォルト』を取得(私はそのトレースを見ることができます) *自分のページ_404.mak *の代わりに404ページ。何か案は?

+0

それは.makoと.MAKないべきか? –

+0

私は.makを使用し、ピラミッドの本もそうです...どちらもうまくいくと思います。 – Sheena

答えて

3

ここでは何のビューが一致していることを見つけることができなかったときにピラミッドが提起した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') 

は「こんにちは、世界を返しますが、 ! "、"/abc "または"/def "(または見つからないもの)を訪れた場合、" Not found! "が返されます。

+0

はい、これは機能します。それでも私のコードがうまくいかないのはなぜですか?あなたの答えは私にヒントを与えます。 404ハンドラでは(renderer = "page_404.mak")のマシンが動作しなかったようです。 render_to_response( 'page_404.mak'、{page-params-here}、request = request) –

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

ありがとう、重要なメモをありがとう!実際に私のコードは両方の問題に苦しんでいることがわかりました。まず第一に、私のテンプレートは有効ではありません。( "renderer"パラメータでテンプレートを指定すると動作しません)、例外を発生させず代わりに返しました。 –

関連する問題