La définition d'un objet dans l'API de cache Django échoue en raison d'une erreur de pickle
Question
J'essaie de définir manuellement un objet dans l'API de cache Django mais cela échoue (je pense en raison du pickling?) L'objet m'est donné par un tiers, mon code est:
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))
Lorsque je lance ceci, une erreur se produit;
Can't pickle <type 'etree._Element'>: import of module etree failed
in - cache.set("user_list_ds", user_list, 10*60) # 10 minutes
Je suis très novice en python et je me demande quelle est la meilleure solution pour résoudre ce problème. Dois-je mariner quelque chose en premier?
La solution
Il semble que vous deviez installer ElementTree
. , car l'opération pickle
tente et ne peut pas importer le module etree
.
UPDATE: En regardant plus loin, essayez-vous réellement de mettre en cache des nœuds de document? Si vous essayez de mettre en cache les données du nœud, vous devrez probablement traiter la valeur que vous stockez actuellement dans liste_utilisateurs
.