在Django缓存API中设置对象失败,因pickle错误
我正在尝试手动将一个对象放入Django的缓存API中,但失败了(我觉得可能是因为序列化的问题?)这个对象是由第三方提供给我的,我的代码是:
def index(request, template_name="mytemplate.htm"):
user_list = cache.get("user_list_ds")
if user_list is None:
# this is the expensive bit I'm trying to cache
# given to me by a third part
user_list = graffiti.user_list("top", 100).responseObj().blocks()
cache.set("user_list_ds", user_list, 10*60) # 10 minutes
return render_to_response(template_name, { 'user_list' : user_list,}, context_instance = RequestContext(request))
当我运行这段代码时,出现了一个错误:
Can't pickle <type 'etree._Element'>: import of module etree failed
in - cache.set("user_list_ds", user_list, 10*60) # 10 minutes
我对Python非常陌生,想知道该如何解决这个问题,我需要先进行序列化吗?
1 个回答
2
看起来你需要安装ElementTree
,因为pickle
操作在尝试导入etree
模块时失败了。
更新:进一步看,你实际上是在尝试缓存文档节点吗?如果你是想缓存节点中的数据,那么你可能需要对目前存储在user_list
中的值进行一些处理。