diff --git a/datasette/app.py b/datasette/app.py index e8496abf..c44f0617 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -14,6 +14,7 @@ from pathlib import Path import click from markupsafe import Markup +import jinja2 from jinja2 import ChoiceLoader, Environment, FileSystemLoader, PrefixLoader, escape from jinja2.environment import Template import uvicorn @@ -612,6 +613,11 @@ class Datasette: }, **extra_template_vars, } + if request and request.args.get("_context") and self.config("template_debug"): + return "
{}".format(
+ jinja2.escape(json.dumps(template_context, default=repr, indent=4))
+ )
+
return await template.render_async(template_context)
def _asset_urls(self, key, template, context):
diff --git a/datasette/views/base.py b/datasette/views/base.py
index 29942b7c..ad05a2f3 100644
--- a/datasette/views/base.py
+++ b/datasette/views/base.py
@@ -6,7 +6,6 @@ import re
import time
import urllib
-import jinja2
import pint
from datasette import __version__
@@ -82,16 +81,6 @@ class BaseView(AsgiView):
"database_color": self.database_color,
},
}
- if (
- request
- and request.args.get("_context")
- and self.ds.config("template_debug")
- ):
- return Response.html(
- "{}".format(
- jinja2.escape(json.dumps(template_context, default=repr, indent=4))
- )
- )
return Response.html(
await self.ds.render_template(
template, template_context, request=request, view_name=self.name
diff --git a/tests/test_html.py b/tests/test_html.py
index 8df946d5..58863d6d 100644
--- a/tests/test_html.py
+++ b/tests/test_html.py
@@ -1097,6 +1097,14 @@ def test_config_template_debug_off(app_client):
assert not response.text.startswith("{")
+def test_debug_context_includes_extra_template_vars():
+ # https://github.com/simonw/datasette/issues/693
+ for client in make_app_client(config={"template_debug": True}):
+ response = client.get("/fixtures/facetable?_context=1")
+ # scope_path is added by PLUGIN1
+ assert "scope_path" in response.text
+
+
def test_metadata_sort(app_client):
response = app_client.get("/fixtures/facet_cities")
assert response.status == 200