Refactor park listing templates: implement grid and list view modes, enhance search results rendering, and improve error handling in search functionality

This commit is contained in:
pacnpal
2025-02-13 12:19:23 -05:00
parent bba707fa98
commit 9d6f6dab2c
5 changed files with 112 additions and 227 deletions

View File

@@ -55,7 +55,7 @@ def search_parks(request: HttpRequest) -> HttpResponse:
try:
search_query = request.GET.get('search', '').strip()
if not search_query:
return HttpResponse('') # Return empty response for empty query
return HttpResponse('') # Keep empty string for clearing search results
queryset = (
Park.objects.select_related('owner')
@@ -74,19 +74,15 @@ def search_parks(request: HttpRequest) -> HttpResponse:
parks = park_filter.qs[:8] # Limit to 8 suggestions
if not parks:
return HttpResponse(
'<div class="p-4 text-sm text-gray-500">No parks found matching your search.</div>'
)
response = render(request, "parks/partials/park_list_item.html", {
"object_list": parks # Use object_list to match template's for loop
response = render(request, "parks/park_list.html", {
"parks": parks
})
response['HX-Trigger'] = 'searchComplete'
return response
except Exception as e:
response = render(request, "parks/partials/park_list_item.html", {
response = render(request, "parks/park_list.html", {
"parks": [],
"error": f"Error performing search: {str(e)}"
})
response['HX-Trigger'] = 'searchError'
@@ -183,7 +179,13 @@ class ParkListView(HTMXFilterableMixin, ListView):
context_object_name = "parks"
filter_class = ParkFilter
paginate_by = 20
def get_template_names(self) -> list[str]:
"""Override to use same template for HTMX and regular requests"""
if self.request.htmx:
return ["parks/partials/park_list_item.html"]
return [self.template_name]
def get_queryset(self) -> QuerySet[Park]:
try:
return (
@@ -209,14 +211,16 @@ class ParkListView(HTMXFilterableMixin, ListView):
def get_context_data(self, **kwargs: Any) -> dict[str, Any]:
try:
return super().get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['results_template'] = "parks/partials/park_list_item.html"
return context
except Exception as e:
messages.error(self.request, f"Error applying filters: {str(e)}")
context = {
return {
"filter": self.filterset,
"error": "Unable to apply filters. Please try adjusting your criteria."
"error": "Unable to apply filters. Please try adjusting your criteria.",
"results_template": "parks/partials/park_list_item.html"
}
return context
class ParkDetailView(