followers.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from misago.conf import settings
  2. from misago.core.shortcuts import paginate, pagination_dict
  3. from django.http import Http404
  4. from misago.users.online.utils import make_users_status_aware
  5. from misago.users.serializers import UserCardSerializer
  6. class Followers(object):
  7. def __init__(self, request, profile, page=0, search=None):
  8. queryset = self.get_queryset(profile).select_related('rank').order_by('slug')
  9. if not request.user.is_staff:
  10. queryset = queryset.filter(is_active=True)
  11. if search:
  12. name_starts_with = search.strip().lower()
  13. if name_starts_with:
  14. queryset = queryset.filter(slug__startswith=name_starts_with)
  15. else:
  16. raise Http404()
  17. list_page = paginate(queryset, page, settings.MISAGO_USERS_PER_PAGE, 4)
  18. make_users_status_aware(request.user, list_page.object_list)
  19. self.users = list_page.object_list
  20. self.paginator = pagination_dict(list_page)
  21. def get_queryset(self, profile):
  22. return profile.followed_by
  23. def get_frontend_context(self):
  24. context = {
  25. 'results': UserCardSerializer(self.users, many=True).data
  26. }
  27. context.update(self.paginator)
  28. return context
  29. def get_template_context(self):
  30. return {
  31. 'followers': self.users,
  32. 'count': self.paginator['count'],
  33. }