def retrieve(self, request, pk = None): try: pk = int(pk) except ValueError: raise Http404("Pk not valid") try: edition = Edition.objects.get(pk = pk) except Edition.DoesNotExist: raise Http404("Not found.") return_json = serialize_edition(edition) return Response(return_json, 200)
def list(self, request): # Sorted by -created date editions = Edition.objects.all() return_json = OrderedDict([('href', request.build_absolute_uri('')), ('count', len(editions)), ('next', None), ('previous', None), ('template', {}), ('results', [])]) request_page = request.GET.get('page', 1) try: page = Paginator(editions, 16, allow_empty_first_page=False).page(request_page) except InvalidPage: raise Http404("Invalid page") except PageNotAnInteger: raise Http404("Page not a number") except EmptyPage: raise Http404("Empty page") for ed in page.object_list: return_json['results'].append( serialize_edition(ed) ) if page.has_next(): parseResult = urlparse.urlparse(request.build_absolute_uri('')) qd = QueryDict(parseResult.query).copy() qd['page'] = int(request_page) + 1 query = qd.urlencode() return_json['next'] = urlparse.urlunsplit((parseResult.scheme, parseResult.netloc, parseResult.path, query, parseResult.fragment)) else: return_json['next'] = None if page.has_previous(): parseResult = urlparse.urlparse(request.build_absolute_uri('')) qd = QueryDict(parseResult.query).copy() qd['page'] = int(request_page) - 1 query = qd.urlencode() return_json['previous'] = urlparse.urlunsplit((parseResult.scheme, parseResult.netloc, parseResult.path, query, parseResult.fragment)) else: return_json['previous'] = None return Response(return_json)