middleware.py 1.0 KB

123456789101112131415161718192021222324
  1. from django.conf import settings
  2. from django.core.cache import cache
  3. from misago.themes.theme import Theme
  4. from misago.themes.models import ThemeAdjustment
  5. class ThemeMiddleware(object):
  6. def process_request(self, request):
  7. if not settings.INSTALLED_THEMES:
  8. raise ValueError('There are no themes installed!')
  9. request.theme = Theme(settings.INSTALLED_THEMES[0])
  10. # Adjust theme for specific client?
  11. if request.META.get('HTTP_USER_AGENT'):
  12. adjustments = cache.get('client_adjustments', 'nada')
  13. if adjustments == 'nada':
  14. adjustments = ThemeAdjustment.objects.all()
  15. cache.set('client_adjustments', adjustments)
  16. if adjustments:
  17. user_agent = request.META.get('HTTP_USER_AGENT').lower()
  18. for item in adjustments:
  19. if item.adjust_theme(user_agent):
  20. request.theme = Theme(item.theme)
  21. break