Django不存数据库时如何在视图上下文传递POST解析的上传数据
解决方案
你不需要将parsed_data存入数据库,该变量是当前POST请求处理流程中生成的临时数据,只需要保证变量作用域覆盖到context赋值环节,直接放入上下文即可供同一次请求的模板渲染调用。
修正后的视图代码
def my_view(request): # 先在外层初始化默认值,解决GET请求下变量未定义的问题 parsed_data = None if request.method == 'POST': # 上传json文件并解析其中的数据 parsed_data = parser.parse() else: # 定义相关表单和变量 pass context = { 'parsed_data': parsed_data } return render(request, 'file.html', context=context)
逻辑说明
- 先在if分支外层初始化
parsed_data默认值(可以根据业务需求设为None、空列表[]或空字典{}),避免GET请求时变量未定义报错 - POST请求生成的
parsed_data属于当前请求的临时变量,直接放入context后,Django在执行render渲染模板时会直接将该值传递给模板,不需要做任何持久化存储 - 模板中可以通过判断
parsed_data的状态做分支渲染:
{% if parsed_data %} <!-- 展示解析后的JSON数据 --> <div>解析结果:{{ parsed_data }}</div> {% else %} <!-- 展示文件上传表单 --> <form method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="json_file" accept=".json"> <button type="submit">上传解析</button> </form> {% endif %}
如果需要跨请求保留该解析数据,才需要额外存入session、缓存或者数据库,当前单次请求返回渲染结果的场景完全不需要持久化存储。
内容的提问来源于stack exchange,提问作者Raphael Kaviak Machnicki
相关产品推荐
相关产品推荐

