将静态JSON传递给Django模板 - 最佳实践?

时间:2011-06-04 02:08:34

标签: python django json

我有一个JSON数据文件,它是我的应用程序的一部分(版本控制等),我们的一些模板需要这个文件中的数据才能正确呈现。

将这些JSON数据提供给模板的各种方法的优缺点是什么?

让我们从将JSON数据存储为模板的相当简单的选项开始,要求模板渲染器生成它,将其解析为JSON,并将其作为模板上下文参数传递给需要它的每个视图:

'mydata': simplejson.loads(render_to_string('data/mydata.json'))

(这似乎有点浪费CPU周期和可能的磁盘访问。渲染的JSON"模板"至少会自动缓存吗?)

还有哪些其他选择? Django是否有任何内置功能我没有为这种用例设计?

2 个答案:

答案 0 :(得分:1)

如果数据应该在多个/所有页面上都可用,那么context_processor可能是您的最佳解决方案:https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS

如果您只需要在几个特定页面上使用它,那么您可以像现在一样将其传递给模板,或者从中制作模板标签。

至于保存cpu时间,如果将它存储在threadlocal变量中,那么每次都不需要解析它。

答案 1 :(得分:1)

最简单也可能最快的事情就是在实际视图之外解析views.py中的json:

mydata = simplejson.loads(json_file)

def foo(request):
    ...
    return render(request, 'template.html', {"mydata": mydata},
        content_type="application/xhtml+xml")

只有在第一次请求views.py文件中的视图时才会解析json,后续请求不会再次解析它。您可以按照建议使用上下文处理器。