From 1558ab79898469918d03b4e17480f9ff0817fc9e Mon Sep 17 00:00:00 2001
From: Simon Willison
Date: Sat, 30 May 2026 22:46:45 -0700
Subject: [PATCH] Fix remaining base_url issues
---
datasette/app.py | 17 +++---
datasette/templates/api_explorer.html | 4 +-
datasette/templates/patterns.html | 84 +++++++++++++--------------
datasette/views/database.py | 6 +-
datasette/views/special.py | 5 +-
tests/test_html.py | 25 +++++++-
6 files changed, 85 insertions(+), 56 deletions(-)
diff --git a/datasette/app.py b/datasette/app.py
index e7f34e69..8b8b601f 100644
--- a/datasette/app.py
+++ b/datasette/app.py
@@ -2870,19 +2870,22 @@ def wrap_view_function(view_fn, datasette):
def permanent_redirect(path, forward_query_string=False, forward_rest=False):
- return wrap_view(
- lambda request, send: Response.redirect(
+ def view(request, send):
+ redirect_path = (
path
+ (request.url_vars["rest"] if forward_rest else "")
+ (
("?" + request.query_string)
if forward_query_string and request.query_string
else ""
- ),
- status=301,
- ),
- datasette=None,
- )
+ )
+ )
+ route_path = request.scope.get("route_path")
+ if route_path and request.path.endswith(route_path):
+ redirect_path = request.path[: -len(route_path)] + redirect_path
+ return Response.redirect(redirect_path, status=301)
+
+ return wrap_view(view, datasette=None)
_curly_re = re.compile(r"({.*?})")
diff --git a/datasette/templates/api_explorer.html b/datasette/templates/api_explorer.html
index dc393c20..58e2a88c 100644
--- a/datasette/templates/api_explorer.html
+++ b/datasette/templates/api_explorer.html
@@ -19,7 +19,7 @@
GET
-