在金字塔中渲染模板和JSON

时间:2012-11-25 22:39:14

标签: python json pyramid

我正在使用远端将会话中的JSON值加载到Web应用程序中。但是,当我最初使用Chameleon模板渲染页面时,我想加载一些任意的JSON值来填充结构。这样做的最佳方式是什么?

我目前正在做的是使用模板呈现页面,然后在文档准备好时使用javascript请求JSON。但是,这会导致装载中出现断断续续的情况。

1 个答案:

答案 0 :(得分:3)

您可以在几个视图之间共享相同的数据。如果请求是通过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请求。

在Pyramid 1.4中,有一个很酷的技巧可以在mako def中嵌入一些html渲染,你可以直接从Python调用它。这使您可以将相同的HTML片段用作AJAX响应,也可以直接在模板中使用。我认为变色龙也存在此功能,但我不确定。