2011-12-20 75 views
1

現在我建立了我的功能,這樣同樣的觀點方法

@view_config(
    route_name = 'route_name', 
    permissions = 'permissions', 
    renderer = 'r.mako' 
) 
def r(request): 
    # stuff goes here 

內渲染器之間進行切換簡單的方法,我想補充的功能,例如,我檢查某些條件(使用AJAX)我會用一個模板,否則使用另一個。有沒有辦法在金字塔中做到這一點?謝謝

+0

這[博客文章](http://cecilphillip.com/content-negotiation-with-the-pyramid-web-framework/)回答你的問題。 – 2018-03-06 15:33:30

回答

14

那麼,如果你可以通過謂詞確定你想要做什麼,那麼你可以用不同的渲染器多次添加視圖。例如

@view_config(route_name='route', xhr=True, renderer='json') 
@view_config(route_name='route', renderer='r.mako') 
@view_config(route_name='route', request_param='fmt=json', renderer='json') 
def r(request): 
    # ... 

或者你可以手動覆蓋渲染通過request.override_renderer = 'b.mako'

http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/narr/renderers.html#overriding-a-renderer-at-runtime

或者你可以明確地渲染通過從視圖中的renderrender_to_response方法的響應,作爲如果您返回視圖中的Response對象,則會忽略參數renderer

請注意,第一個示例中的xhr謂詞應該足以檢查ajax請求。還要注意,如果你不想要,你不必爲兩者使用相同的視圖,只需要依賴。

+0

此外,view_config的'accept'參數可用於呈現請求的格式。例如'@view_config(route_name =「route」,accept =「application/json」,renderer =「json」)''。 – 2011-12-20 14:58:33

+1

'accept'不可靠,除非將其添加到該「組」中的所有視圖。它受到accept頭中的質量因素的影響,所以另一個視圖應該是'accept ='text/html',或者json總是被選中,因爲如果你記得大多數瀏覽器指定'accept ='*/*' '。 – 2011-12-20 15:54:37