shortcuts.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. from django.shortcuts import * # noqa
  2. from rest_framework.compat import OrderedDict
  3. def paginate(object_list, page, per_page, orphans=0,
  4. allow_empty_first_page=True):
  5. from django.http import Http404
  6. from django.core.paginator import Paginator, EmptyPage
  7. from misago.core.exceptions import ExplicitFirstPage
  8. if page in (1, "1"):
  9. raise ExplicitFirstPage()
  10. elif not page:
  11. page = 1
  12. try:
  13. return Paginator(
  14. object_list, per_page, orphans=orphans,
  15. allow_empty_first_page=allow_empty_first_page).page(page)
  16. except EmptyPage:
  17. raise Http404()
  18. def pagination_dict(page):
  19. pagination = {
  20. 'page': page.number,
  21. 'pages': page.paginator.num_pages,
  22. 'page_range': page.paginator.page_range,
  23. 'first': None,
  24. 'previous': None,
  25. 'next': None,
  26. 'last': None,
  27. 'before': 0,
  28. 'more': 0,
  29. }
  30. if page.has_previous():
  31. pagination['first'] = 1
  32. if page.previous_page_number() > 1:
  33. pagination['previous'] = page.previous_page_number()
  34. if page.has_next():
  35. pagination['last'] = page.paginator.num_pages
  36. if page.next_page_number() <= page.paginator.num_pages:
  37. pagination['next'] = page.next_page_number()
  38. if page.start_index():
  39. pagination['before'] = page.start_index() - 1
  40. pagination['more'] = page.paginator.count - page.end_index()
  41. return OrderedDict([
  42. ('count', page.paginator.count),
  43. ('page', pagination['page']),
  44. ('pages', pagination['pages']),
  45. ('page_range', pagination['page_range']),
  46. ('first', pagination['first']),
  47. ('previous', pagination['previous']),
  48. ('next', pagination['next']),
  49. ('last', pagination['last']),
  50. ('before', pagination['before']),
  51. ('more', pagination['more'])
  52. ])
  53. def validate_slug(model, slug):
  54. from misago.core.exceptions import OutdatedSlug
  55. if model.slug != slug:
  56. raise OutdatedSlug(model)