diff --git a/pycsw/ogc/api/records.py b/pycsw/ogc/api/records.py index 26c12384c..2ca081bf3 100644 --- a/pycsw/ogc/api/records.py +++ b/pycsw/ogc/api/records.py @@ -948,6 +948,37 @@ def item(self, headers_, args, collection, item): record = self.repository.query_ids([item])[0] response = record2json(record, self.config['server']['url'], collection, self.mode) + query = self.repository.session.query( + self.repository.dataset.identifier + ).order_by( + self.repository.dataset.identifier + ) + + ids = [r[0] for r in query.all()] + + if item in ids: + idx = ids.index(item) + + prev_id = ids[idx - 1] if idx > 0 else None + next_id = ids[idx + 1] if idx < len(ids) - 1 else None + + response.setdefault('links', []) + + if prev_id: + response['links'].append({ + 'rel': 'prev', + 'type': 'text/html', + 'title': 'Previous item', + 'href': f"{self.config['server']['url']}/collections/{collection}/items/{prev_id}?f=html" + }) + + if next_id: + response['links'].append({ + 'rel': 'next', + 'type': 'text/html', + 'title': 'Next item', + 'href': f"{self.config['server']['url']}/collections/{collection}/items/{next_id}?f=html" + }) except IndexError: distributed = str2bool(args.get('distributed', False)) @@ -977,6 +1008,7 @@ def item(self, headers_, args, collection, item): if 'json' in headers_['Content-Type']: headers_['Content-Type'] = 'application/geo+json' + print(response['links']) return self.get_response(200, headers_, response, 'item.html') def manage_collection_item(self, headers_, action='create', collection=None, diff --git a/pycsw/templates/item.html b/pycsw/templates/item.html index cd08ec756..334f2ceb9 100644 --- a/pycsw/templates/item.html +++ b/pycsw/templates/item.html @@ -20,6 +20,14 @@ {{ data['id'] }} {% endblock %} {% block body %} +{% set nav_links = namespace(prev=None, next=None) %} +{% for link in data['links'] %} + {% if link['rel'] == 'prev' %} + {% set nav_links.prev = link['href'] %} + {% elif link['rel'] == 'next' %} + {% set nav_links.next = link['href'] %} + {% endif %} +{% endfor %} @@ -179,6 +187,28 @@ {{ data.get('properties',{}).get('title',data['id']) }} {% endif %} + + + {% if nav_links.prev %} + + Prev + + {% else %} + Prev + {% endif %} + + + + {% if nav_links.next %} + + Next + + {% else %} + Next + {% endif %} + + +