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>

当点击一个不存在的页面时,我在空白页面上看到消息“未找到,伙计”,但我希望看到我的模板“呃,哦......你遇到了一个错误!” 其次是请求信息。

我怀疑我读错了:

notfound_view_config 构造函数接受大多数与 pyramid.view.view_config 构造函数相同的参数。它可以在相同的地方使用,并且以大致相同的方式运行,除了它总是注册一个未找到的异常视图而不是一个“正常”视图。

一方面,似乎我应该能够将“renderer”指定为参数,因为它在 pryamid.view.view_config 中受支持。另一方面,听起来它总是加载[未找到异常视图] [3],而不管“渲染器”选项。

真的,我的最终问题(和目标)是,当找不到页面时如何显示/呈现我的模板?

4

1 回答 1

3

Pyramid 中的渲染器-视图关系始终相同。如果您返回一个 Response 对象,那么您声明的渲染器将被绕过。这使您可以执行诸如if submitted: return HTTPFound(location=...) else: return {}. 如果您想影响响应对象并仍然使用您的渲染器,则返回所需的 dict 和 mutate request.response,即用于所有渲染器的响应对象。

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