shortcuts.py 2.1 KB

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