Make request available when rendering custom pages, closes #738

This commit is contained in:
Simon Willison 2020-04-26 12:01:46 -07:00
commit 1b7b66c465
2 changed files with 11 additions and 1 deletions

View file

@ -40,6 +40,7 @@ from .utils import (
from .utils.asgi import ( from .utils.asgi import (
AsgiLifespan, AsgiLifespan,
NotFound, NotFound,
Request,
Response, Response,
asgi_static, asgi_static,
asgi_send, asgi_send,
@ -785,6 +786,7 @@ class DatasetteRouter(AsgiRouter):
"custom_status": custom_status, "custom_status": custom_status,
"custom_redirect": custom_redirect, "custom_redirect": custom_redirect,
}, },
request=Request(scope, receive),
view_name="page", view_name="page",
) )
# Pull content-type out into separate parameter # Pull content-type out into separate parameter

View file

@ -5,9 +5,10 @@ VIEW_NAME_PLUGIN = """
from datasette import hookimpl from datasette import hookimpl
@hookimpl @hookimpl
def extra_template_vars(view_name): def extra_template_vars(view_name, request):
return { return {
"view_name": view_name, "view_name": view_name,
"request": request,
} }
""" """
@ -19,6 +20,7 @@ def custom_pages_client(tmp_path_factory):
pages_dir = template_dir / "pages" pages_dir = template_dir / "pages"
pages_dir.mkdir() pages_dir.mkdir()
(pages_dir / "about.html").write_text("ABOUT! view_name:{{ view_name }}", "utf-8") (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 / "202.html").write_text("{{ custom_status(202) }}202!", "utf-8")
(pages_dir / "headers.html").write_text( (pages_dir / "headers.html").write_text(
'{{ custom_header("x-this-is-foo", "foo") }}FOO' '{{ 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 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): def test_custom_pages_nested(custom_pages_client):
response = custom_pages_client.get("/nested/nest") response = custom_pages_client.get("/nested/nest")
assert 200 == response.status assert 200 == response.status