Skip to content

Commit b1a45b7

Browse files
sarahboyceSaptakS
authored andcommitted
Preserved category filter between searches.
1 parent d0a86e8 commit b1a45b7

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

djangoproject/templates/search_form.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<form action="{% url 'document-search' version=version lang=lang host 'docs' %}">
44
<label id="docs-search-label" class="visuallyhidden" for="{{ form.q.id_for_label }}">{{ form.q.field.widget.attrs.placeholder }}</label>
55
{{ form.q }}
6+
<input type="hidden" name="category" value="{{ active_category }}">
67

78
<button type="submit">
89
<i class="icon icon-search" aria-hidden="true"></i>

docs/templatetags/docs.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def search_form(context):
3434

3535
request = context["request"]
3636
lang = context.get("lang", settings.DEFAULT_LANGUAGE_CODE)
37+
active_category = context.get("active_category", "")
3738

3839
if "version" in context:
3940
release = DocumentRelease.objects.select_related(
@@ -46,6 +47,7 @@ def search_form(context):
4647
"form": DocSearchForm(request.GET, release=release),
4748
"version": release.version,
4849
"lang": lang,
50+
"active_category": active_category,
4951
}
5052

5153

docs/tests/test_views.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,31 @@ def test_search_website_category_french(self):
164164
html=True,
165165
)
166166

167+
def test_search_category_filter_preserved(self):
168+
response = self.client.get(
169+
"/en/5.1/search/?q=potato&category=ref",
170+
headers={"host": "docs.djangoproject.localhost:8000"},
171+
)
172+
self.assertEqual(response.status_code, 200)
173+
self.assertContains(
174+
response, '<input type="hidden" name="category" value="ref">'
175+
)
176+
self.assertContains(
177+
response, f"{self.active_filter}API Reference</a>", html=True
178+
)
179+
response = self.client.post(
180+
"/en/5.1/search/?q=potato&category=ref",
181+
headers={"host": "docs.djangoproject.localhost:8000"},
182+
data={"category": "ref", "q": "fish"},
183+
)
184+
self.assertEqual(response.status_code, 200)
185+
self.assertContains(
186+
response, '<input type="hidden" name="category" value="ref">'
187+
)
188+
self.assertContains(
189+
response, f"{self.active_filter}API Reference</a>", html=True
190+
)
191+
167192
def test_code_links(self):
168193
queryset_data = {
169194
"metadata": {

docs/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ def search_results(request, lang, version, per_page=10, orphans=3):
144144

145145
activate(lang)
146146

147+
doc_category = DocumentationCategory.parse(request.GET.get("category"))
147148
form = DocSearchForm(request.GET or None, release=release)
148149

149150
# Get available languages for the language switcher
@@ -158,6 +159,7 @@ def search_results(request, lang, version, per_page=10, orphans=3):
158159
"release": release,
159160
"available_languages": available_languages,
160161
"searchparams": request.GET.urlencode(),
162+
"active_category": doc_category or "",
161163
}
162164

163165
if form.is_valid():
@@ -169,7 +171,6 @@ def search_results(request, lang, version, per_page=10, orphans=3):
169171
if exact is not None:
170172
return redirect(exact)
171173

172-
doc_category = DocumentationCategory.parse(request.GET.get("category"))
173174
results = Document.objects.search(
174175
q, release, document_category=doc_category
175176
)
@@ -201,7 +202,6 @@ def search_results(request, lang, version, per_page=10, orphans=3):
201202
"page": page,
202203
"paginator": paginator,
203204
"start_sel": START_SEL,
204-
"active_category": doc_category,
205205
"DocumentationCategory": DocumentationCategory,
206206
}
207207
)

0 commit comments

Comments
 (0)