我在金字塔的應用程序定義一個自定義的404視圖:金字塔:自定義404名錯誤頁面返回的「200 OK」
@view_config(context=HTTPNotFound, renderer='404.pt')
def not_found(self, request):
return {}
它工作正常,除了與內容發送的HTTP狀態代碼是200 OK ,這是不行的。我與403 Forbidden有同樣的問題。我怎樣才能讓金字塔發送正確的狀態碼?
我在金字塔的應用程序定義一個自定義的404視圖:金字塔:自定義404名錯誤頁面返回的「200 OK」
@view_config(context=HTTPNotFound, renderer='404.pt')
def not_found(self, request):
return {}
它工作正常,除了與內容發送的HTTP狀態代碼是200 OK ,這是不行的。我與403 Forbidden有同樣的問題。我怎樣才能讓金字塔發送正確的狀態碼?
例外視圖鏈接的頁面取的例子是,它提供了光點FO一個單獨的視圖你可以做任何你想做的事情。就像任何使用渲染器的視圖一樣,您可以通過request.response
影響響應對象以修改其行爲。渲染器然後填充身體。
@view_config(context=HTTPNotFound, renderer='404.pt')
def not_found(self, request):
request.response.status = 404
return {}
做到這一點,最好的辦法就是覆蓋默認未找到查看:
即使在這種情況下,您需要返回其具有404狀態正確的響應對象:
def notfound(request):
return Response('Not Found, dude', status='404 Not Found')
向來自上述
但是,這並不讓我用一個變色龍模板... :( – 2012-03-22 01:43:53
你可以,你自己呈現模板,或者,我相信變色龍渲染器將讓你返回一個Response對象和那麼,如果你做了你上面發佈的內容,但是返回Response(status ='404 Not Found'),我相信它會通過變色龍提供一個空的字典並帶有正確的響應代碼。 – turtlebender 2012-03-22 02:19:09
實際上,在金字塔1.3有一個新的裝飾@notfound_view_config。
@notfound_view_config(renderer = '404_error.jinja2')
def notfound(request):
request.response.status = 404
下面是如何直接使用404鉤子並呈現模板的過程。
在你INIT的.py:
config.add_notfound_view(not_found)
在你view.py:
from pyramid.view import notfound_view_config
from pyramid.renderers import render_to_response
def not_found(request):
request.response.status = 404
t = 'talk_python_to_me_com:templates/errors/404.pt'
return render_to_response(t, {}, request)
我這樣做是爲了談Python的對我說:,這裏是一個無效的頁面看到自定義模板呈現。
完美!但是,一個更正:狀態應該是'404 Not Found'。從金字塔文檔:「response.status - 響應代碼加上原因消息,如'200 OK'要設置沒有消息的代碼,請使用status_int ,即:response.status_int = 200.「 – 2012-03-22 02:41:49
如果你se把它作爲一個整數,它將在其內部查找表中查找狀態併爲你填充字符串。這是一個方便的皺紋,可能應該記錄得更好。 – 2012-03-22 03:56:52