From 1b7b66c465e44025ec73421bd69752e42f108321 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sun, 26 Apr 2020 12:01:46 -0700 Subject: [PATCH] Make request available when rendering custom pages, closes #738 --- datasette/app.py | 2 ++ tests/test_custom_pages.py | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/datasette/app.py b/datasette/app.py index baddfc9f..221e862c 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -40,6 +40,7 @@ from .utils import ( from .utils.asgi import ( AsgiLifespan, NotFound, + Request, Response, asgi_static, asgi_send, @@ -785,6 +786,7 @@ class DatasetteRouter(AsgiRouter): "custom_status": custom_status, "custom_redirect": custom_redirect, }, + request=Request(scope, receive), view_name="page", ) # Pull content-type out into separate parameter diff --git a/tests/test_custom_pages.py b/tests/test_custom_pages.py index 871dd69c..8ac75ec8 100644 --- a/tests/test_custom_pages.py +++ b/tests/test_custom_pages.py @@ -5,9 +5,10 @@ VIEW_NAME_PLUGIN = """ from datasette import hookimpl @hookimpl -def extra_template_vars(view_name): +def extra_template_vars(view_name, request): return { "view_name": view_name, + "request": request, } """ @@ -19,6 +20,7 @@ def custom_pages_client(tmp_path_factory): pages_dir = template_dir / "pages" pages_dir.mkdir() (pages_dir / "about.html").write_text("ABOUT! view_name:{{ view_name }}", "utf-8") + (pages_dir / "request.html").write_text("path:{{ request.path }}", "utf-8") (pages_dir / "202.html").write_text("{{ custom_status(202) }}202!", "utf-8") (pages_dir / "headers.html").write_text( '{{ custom_header("x-this-is-foo", "foo") }}FOO' @@ -49,6 +51,12 @@ def test_custom_pages_view_name(custom_pages_client): assert "ABOUT! view_name:page" == response.text +def test_request_is_available(custom_pages_client): + response = custom_pages_client.get("/request") + assert 200 == response.status + assert "path:/request" == response.text + + def test_custom_pages_nested(custom_pages_client): response = custom_pages_client.get("/nested/nest") assert 200 == response.status