1

Pyramid Docs - Using Hooksで説明されているように@notfound_view_configを使用すると、指定したテンプレートをレンダリングできません。

ビュー.py:

@notfound_view_config(renderer='templates/notfound.pt')
def notfound(request):
    return Response('Not Found, dude', status='404 Not Found')

テンプレート/notfound.pt:

<html xmlns="http://www.w3.org/1999/xhtml"
      metal:use-macro="base">

<tal:block metal:fill-slot="content">

            <!-- Example row of columns -->
            <div class="row">
                <div class="span12">
                   <h1>Error:</h1>
                   <p>Uh, oh... you snagged an error:</p>
                   <pre>"${request}"</pre>

                   <p>You can return to the <a href="${request.application_url}">homepage</a> if you wish.</p>

                </div>
            </div>

</tal:block>
</html>

存在しないページにアクセスすると、空白のページに "Not Found, dude" というメッセージが表示されますが、テンプレートには "うーん、ああ...エラーが発生しました!" と表示されるはずでした。要求情報が続きます。

私はこれを間違って読んでいると思います:

notfound_view_config コンストラクターは、pyramid.view.view_config のコンストラクターと同じ引数のほとんどを受け入れます。同じ場所で使用でき、「通常の」ビューの代わりに見つからない例外ビューを常に登録することを除いて、ほぼ同じように動作します。

一方では、pryamid.view.view_config でサポートされているため、「renderer」をパラメーターとして指定できるはずです。一方、「レンダラー」オプションに関係なく、常に [not found exception ビュー][3] をロードしているように聞こえます。

本当に、私の最終的な質問 (および目標) は、ページが見つからない場合にテンプレートを表示/レンダリングするにはどうすればよいかということです。

4

1 に答える 1

3

Pyramid では、レンダラーとビューの関係は常に同じです。Response オブジェクトを返す場合、宣言されたレンダラーはバイパスされます。これにより、次のようなことができますif submitted: return HTTPFound(location=...) else: return {}。応答オブジェクトに影響を与え、引き続きレンダラーを使用したい場合は、必要な dict を返し、request.responseすべてのレンダラーに使用される応答オブジェクトである mutate を返します。

@notfound_view_config(renderer='templates/notfound.pt')
def notfound(request):
    request.response.status = 404
    return {}
于 2013-03-29T03:56:43.280 に答える