2012-11-25 30 views
0

我正在使用遠端將會話中的JSON值加載到Web應用程序中。但是,當我最初使用Chameleon模板呈現頁面時,我想加載一些任意的JSON值來填充結構。做這個的最好方式是什麼?在金字塔中呈現模板和JSON

我目前正在做的是使用模板渲染頁面,然後在文檔準備就緒時使用JavaScript來請求JSON。但是,這會導致加載中出現口吃。

+0

你在問題中遺漏了什麼,阻止你從視圖中向渲染器返回額外的值? –

+0

用於將JSON值加載到頁面中的JavaScript調用。我將其包含在問題中...... – abroekhof

+0

您是否遺漏了模板的基本概念,您可以在渲染模板時將數據傳遞到模板中?如果沒有,請粘貼一些可能會導致問題的Python。 –

回答

2

您可以在兩個視圖之間共享相同的數據。如果請求是通過AJAX發送的,您將返回一個json編碼版本的數據(some_data_route)。如果您還想在呈現初始html頁面時呈現此數據,請將其傳遞到您的模板並在那裏處理。

@view_config(route_name='some_data_route', renderer='json') 
def data_view(request): 
    data = load_data(request) # find the data somewhere 
    return {'data': data} 

@view_config(route_name='some_route', renderer='some_route.html.mako') 
def view(request): 
    data = load_data(request) 
    return {'data': data} 

現在,您可以執行一些技巧,使模板中的渲染代碼更接近於ajax處理代碼(如果您願意)。例如,也許你想要JSON編碼data然後在你的變色龍模板中,你可以將這些數據傳遞給你的AJAX回調。這不會被調用,直到JavaScript被加載,但至少它不會需要最初的HTTP請求。

在金字塔1.4中,有一個很酷的技巧可以將一些html渲染嵌入到可直接從Python中調用的mak def中。這使您可以使用與AJAX響應相同的HTML代碼段,也可以直接在您的模板中使用。我認爲這個功能也適用於變色龍,但我不確定。