2012-02-14 50 views
0

我想在金字塔應用程序中顯示我的404頁面,但可以使其工作。閱讀關於這一主題的各項魔法文字後,我把這樣的事情在我的代碼:我的自定義404頁面不起作用(金字塔框架)

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

但是當我* Page_not_found_view *調用處理程序(我可以看到它的蹤跡)我仍然獲得那可憐的‘默認’ 404頁面而不是*我自己的page_404.mak *。有任何想法嗎?

+0

它應該被.mako而不是.MAK? – 2012-03-08 16:28:41

+0

我使用.mak,金字塔書籍也是如此......我認爲要麼工作正常 – Sheena 2012-06-22 06:27:35

回答

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') 

參觀「/」將返回的「Hello world !「,訪問」/ abc「或」/ def「(或其他未找到的內容)將返回」未找到!「。

+0

是的,這是有效的。仍然問題是爲什麼我的代碼沒有工作?你的回答給了我一個提示。看起來像(renderer =「page_404.mak」)機器不適用於404處理程序。我將代碼替換爲「手動」渲染後工作,如:render_to_response('page_404.mak',{page-params-here},request = request) – 2012-02-15 10:36:45

2

What @ chris-mcdonough寫道應該在大多數情況下工作。但是,如果您在視圖中使用可匹配的匹配項,並且在沒有匹配項時想顯示自定義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」參數指定模板不起作用),然後我沒有引發異常,而是返回它。 – 2012-02-15 13:25:02