我有一个JSON数据文件,它是我的应用程序的一部分(版本控制等),我们的一些模板需要这个文件中的数据才能正确呈现。
将这些JSON数据提供给模板的各种方法的优缺点是什么?
让我们从将JSON数据存储为模板的相当简单的选项开始,要求模板渲染器生成它,将其解析为JSON,并将其作为模板上下文参数传递给需要它的每个视图:
'mydata': simplejson.loads(render_to_string('data/mydata.json'))
(这似乎有点浪费CPU周期和可能的磁盘访问。渲染的JSON"模板"至少会自动缓存吗?)
还有哪些其他选择? Django是否有任何内置功能我没有为这种用例设计?
答案 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,后续请求不会再次解析它。您可以按照建议使用上下文处理器。