Ich möchte in PyLucid nur einen einzigen view cachen, nämlich nur der normale CMS page request.
Meine Lösung sieht so aus, das ich mir eine eigene cache middleware gebaut hab. Also ich erbe von der normalen CacheMiddleware und prüfe nach ob der view auch der ist, der gecached werden sollte, ansonsten wird das caching ausgeschaltet.
Code: Alles auswählen
from django.middleware.cache import CacheMiddleware
class PageCache(CacheMiddleware):
"""
change a little bit the operation method of the django CacheMiddleware:
-Cache only the normal cms page view.
So the _install and _command view would be not cached.
"""
def process_view(self, request, view_func, view_args, view_kwargs):
if view_func.func_name != "index":
# Cache only the normal cms page view
request._cache_update_cache = False
Normalerweise müsste man das selbe mit dem "The per-view cache" erreichen können:
http://www.djangoproject.com/documentat ... view-cache
Nutzte ich das, so bekomme ich aber immer einen Fehler:
Ich hab allerdings als erstes die SessionMiddleware und gleich danachdie AuthenticationMiddleware in der MIDDLEWARE_CLASSES drin.The Django cache middleware with CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True requires authentication middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.auth.middleware.AuthenticationMiddleware' before the CacheMiddleware.
Schalte ich CACHE_MIDDLEWARE_ANONYMOUS_ONLY aus, dann kommt der nächsten Fehler:
Nehme ich den Decorator "@cache_page(60 * 15)" wieder weg, geht der view wieder, halt ohne Cache.ViewDoesNotExist: Tried index in module PyLucid.index. Error was: 'function' object has no attribute 'method'
Nutzte ich statt dem Decorator die "alte" Variante: "index = cache_page(index, 60 * 15" geht der view zwar auch wieder, aber wird nicht gechached
EDIT1:
Gerade das http://code.djangoproject.com/ticket/4421 gesehen. Also hab ich mal statt index = cache_page(index, 60 * 15) das ganze in der Variante: index = cache_page(60 * 15)(index) geschrieben.
Siehe da mit der Variante kommt es zum selben Fehler, wie mit @cache_page(60 * 15)...
EDIT2:
Hm! Noch was gefunden: http://groups.google.com/group/django-d ... c3215683c/
Und jetzt wird es richtig merkwürdig!
Ich hab es mal mit index = cache_page(index) und @cache_page probiert. Siehe da es klappt schon fast.
Das komische: Der django-dev-Server verhält sich etwas anders, als die Apache-CGI Version. Beide nutzten aber CACHE_BACKEND = 'file:///tmp/PyLucid_cache'. Beide nutzten sowieso die selbe settings.py...
irgendwie scheint das richtig Buggy zu sein...
EDIT3: Hab mal ein neues Ticket geschrieben: http://code.djangoproject.com/ticket/4649