diff --git a/datasette/app.py b/datasette/app.py index f998f390..82562d15 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -398,6 +398,12 @@ class Datasette: labeled_fks[(fk["column"], id)] = value return labeled_fks + def absolute_url(self, request, path): + url = urllib.parse.urljoin(request.url, path) + if url.startswith("http://") and self.config("force_https_urls"): + url = "https://" + url[len("http://"):] + return url + def inspect(self): " Inspect the database and return a dictionary of table metadata " if self._inspect: diff --git a/datasette/views/base.py b/datasette/views/base.py index a0a16679..010099d9 100644 --- a/datasette/views/base.py +++ b/datasette/views/base.py @@ -207,12 +207,6 @@ class BaseView(RenderMixin): return name, expected, correct_hash_provided, None - def absolute_url(self, request, path): - url = urllib.parse.urljoin(request.url, path) - if url.startswith("http://") and self.ds.config("force_https_urls"): - url = "https://" + url[len("http://"):] - return url - def get_templates(self, database, table=None): assert NotImplemented diff --git a/datasette/views/table.py b/datasette/views/table.py index 5e95aeed..d1c1d8c4 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -536,7 +536,7 @@ class TableView(RowTableShared): row["value"] ), "count": row["count"], - "toggle_url": self.absolute_url(request, toggle_path), + "toggle_url": self.ds.absolute_url(request, toggle_path), "selected": selected, }) except InterruptedError: @@ -620,7 +620,7 @@ class TableView(RowTableShared): added_args["_sort_desc"] = sort_desc else: added_args = {"_next": next_value} - next_url = self.absolute_url( + next_url = self.ds.absolute_url( request, path_with_replaced_args(request, added_args) ) rows = rows[:page_size] @@ -672,7 +672,7 @@ class TableView(RowTableShared): ): suggested_facets.append({ 'name': facet_column, - 'toggle_url': self.absolute_url( + 'toggle_url': self.ds.absolute_url( request, path_with_added_args( request, {"_facet": facet_column} )