diff --git a/datasette/views/table.py b/datasette/views/table.py index 83f7c7cb..e8c66d3c 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -588,13 +588,15 @@ class TableView(RowTableShared): _next = _next or special_args.get("_next") offset = "" if _next: + sort_value = None if is_view: # _next is an offset offset = f" offset {int(_next)}" else: components = urlsafe_components(_next) - # If a sort order is applied, the first of these is the sort value - if sort or sort_desc: + # If a sort order is applied and there are multiple components, + # the first of these is the sort value + if (sort or sort_desc) and (len(components) > 1): sort_value = components[0] # Special case for if non-urlencoded first token was $null if _next.split(",")[0] == "$null": diff --git a/tests/test_html.py b/tests/test_html.py index e73ccd2f..c22d87da 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -1817,3 +1817,9 @@ def test_facet_total_shown_if_facet_max_size(use_facet_size_max): assert fragment in response.text else: assert fragment not in response.text + + +def test_sort_rowid_with_next(app_client): + # https://github.com/simonw/datasette/issues/1470 + response = app_client.get("/fixtures/binary_data?_size=1&_next=1&_sort=rowid") + assert response.status == 200