2010-05-05 9 views
0

Hé les gars, je viens d'implémenter le backend de la mémoire locale de cache de Django dans mon code, mais il semble y avoir un problème.La mise en cache de Django semble causer des problèmes

je reçois l'erreur suivante lorsque vous essayez de voir le site (avec débogage):

Traceback (most recent call last): 

    File "/usr/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 279, in run 
    self.result = application(self.environ, self.start_response) 

    File "/usr/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 651, in __call__ 
    return self.application(environ, start_response) 

    File "/usr/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 245, in __call__ 
    response = middleware_method(request, response) 

    File "/usr/lib/python2.6/dist-packages/django/middleware/cache.py", line 91, in process_response 
    patch_response_headers(response, timeout) 

    File "/usr/lib/python2.6/dist-packages/django/utils/cache.py", line 112, in patch_response_headers 
    response['Expires'] = http_date(time.time() + cache_timeout) 

TypeError: unsupported operand type(s) for +: 'float' and 'str' 

J'ai vérifié mon code, pour tout mettre en cache semble être ok. Par exemple, j'ai ce qui suit dans mon middleware.

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.middleware.cache.UpdateCacheMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.cache.FetchFromCacheMiddleware', 
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 
) 

Mes paramètres pour Cache:

CACHE_BACKEND = 'locmem://' 
CACHE_MIDDLEWARE_SECONDS = '3600' 
CACHE_MIDDLEWARE_KEY_PREFIX = 'za' 
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True 

Et une partie de mon code (balise modèle):

def get_featured_images(): 
    """ 
    provides featured images 
    """ 

    cache_key = 'featured_images' 
    images = cache.get(cache_key) 
    if images is None:   
     images = FeaturedImage.objects.all().filter(enabled=True)[:5] 
     cache.set(cache_key, images) 


    return {'images': images} 

Toute idée de ce qui pourrait être le problème, du message d'erreur en dessous On dirait qu'il y a un problème dans cache.py de django?

Mise à jour !!! Définissez le cache temporel sur une chaîne!

Répondre

4

Vous avez défini le nombre de secondes à mettre en cache en tant que chaîne au lieu d'un int. Devrait être:

CACHE_MIDDLEWARE_SECONDS = 3600 
0

CACHE_MIDDLEWARE_SECONDS doit être int/flotteur, pas la chaîne:

CACHE_MIDDLEWARE_SECONDS = 3600 
Questions connexes