2009-10-23 6 views
2

J'essaie de définir manuellement un objet dans l'API de cache de Django mais cela échoue (je pense à cause du décapage?) L'objet m'a été donné par un troisième partie, mon code est:La définition d'un objet dans l'API de cache Django échoue en raison d'une erreur de pickle

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 j'exécute ceci, j'obtiens une erreur;

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 nouveau pour python, et je me demande la meilleure façon de résoudre ce problème, ai-je besoin de décaper quelque chose d'abord?

Répondre

2

Il semble que vous devez installer ElementTree, car l'opération pickle tente d'importer le module etree et échoue à l'importer. MISE À JOUR: En y regardant de plus près, essayez-vous réellement de mettre en cache les nœuds de documents? Si vous essayez de mettre en cache les données du noeud, vous devez probablement traiter la valeur que vous stockez actuellement dans user_list.

+0

Vous aviez raison, j'ai dû changer le type de données que nous essayions de mettre en cache dans une liste python normale. –