diff --git a/datasette/templates/table.html b/datasette/templates/table.html
index 373fd576..6b859132 100644
--- a/datasette/templates/table.html
+++ b/datasette/templates/table.html
@@ -88,9 +88,6 @@
{% endif %}
- {% for facet in sorted_facet_results %}
-
- {% endfor %}
{% for key, value in form_hidden_args %}
{% endfor %}
diff --git a/datasette/views/table.py b/datasette/views/table.py
index 50f3345f..74126244 100644
--- a/datasette/views/table.py
+++ b/datasette/views/table.py
@@ -778,6 +778,12 @@ class TableView(RowTableShared):
)
self.ds.update_with_inherited_metadata(metadata)
form_hidden_args = []
+ # Add currently selected facets
+ for arg in special_args:
+ if arg == "_facet" or arg.startswith("_facet_"):
+ form_hidden_args.extend(
+ (arg, item) for item in request.args.getlist(arg)
+ )
for arg in ("_fts_table", "_fts_pk"):
if arg in special_args:
form_hidden_args.append((arg, special_args[arg]))
diff --git a/tests/test_html.py b/tests/test_html.py
index aec4db1d..4c57bfce 100644
--- a/tests/test_html.py
+++ b/tests/test_html.py
@@ -448,12 +448,16 @@ def test_facet_display(app_client):
def test_facets_persist_through_filter_form(app_client):
- response = app_client.get("/fixtures/facetable?_facet=planet_int&_facet=city_id")
+ response = app_client.get(
+ "/fixtures/facetable?_facet=planet_int&_facet=city_id&_facet_array=tags"
+ )
assert response.status == 200
inputs = Soup(response.body, "html.parser").find("form").findAll("input")
hiddens = [i for i in inputs if i["type"] == "hidden"]
- assert [("_facet", "city_id"), ("_facet", "planet_int")] == [
- (hidden["name"], hidden["value"]) for hidden in hiddens
+ assert [(hidden["name"], hidden["value"]) for hidden in hiddens] == [
+ ("_facet", "planet_int"),
+ ("_facet", "city_id"),
+ ("_facet_array", "tags"),
]