context_processors.py 901 B

123456789101112131415161718192021222324252627
  1. from django.db.models import Q
  2. from misago.core.cache import cache
  3. from .serializers import BasicCategorySerializer
  4. from .models import Category
  5. def preload_categories_json(request):
  6. try:
  7. user_acl_key = request.user.acl_key
  8. except AttributeError:
  9. return {}
  10. cache_key = 'misago_categories_json_{}'.format(request.user.acl_key)
  11. categories_json = cache.get(cache_key, 'nada')
  12. if categories_json == 'nada':
  13. is_root = Q(level=0)
  14. is_visible = Q(id__in=request.user.acl_cache['visible_categories'])
  15. queryset = Category.objects.all_categories(include_root=True)
  16. queryset = queryset.filter(is_root | is_visible)
  17. categories_json = BasicCategorySerializer(queryset, many=True).data
  18. cache.set(cache_key, categories_json, 15 * 60)
  19. request.frontend_context['store']['categories'] = categories_json
  20. return {}