0

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

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

4

1 回答 1

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 中嵌入一些 html 渲染def,您可以直接从 Python 调用它。这允许您使用相同的 HTML 片段作为 AJAX 响应或直接在您的模板中。我认为变色龙也存在此功能,但我不确定。

于 2012-11-26T00:44:08.343 回答