diff --git a/hub/services/templatetags/json_ld_tags.py b/hub/services/templatetags/json_ld_tags.py index fc0e47e..761b8a3 100644 --- a/hub/services/templatetags/json_ld_tags.py +++ b/hub/services/templatetags/json_ld_tags.py @@ -1,6 +1,6 @@ # hub/services/templatetags/json_ld_tags.py from django import template -from django.urls import resolve +from django.urls import resolve, Resolver404 from django.utils.safestring import mark_safe import json @@ -13,13 +13,12 @@ def json_ld_structured_data(context): Generates appropriate JSON-LD structured data based on the current page. For schemas, see https://schema.org/ """ - request = context["request"] - current_url = request.path - resolved_view = resolve(current_url) - view_name = resolved_view.url_name + request = context.get("request") + if not request: + return "" - # Base URL for building absolute URLs - base_url = request.build_absolute_uri("/").rstrip("/") + current_url = request.path + base_url = f"{request.scheme}://{request.get_host()}" # Default organization data (for Servala) organization_data = { @@ -43,6 +42,23 @@ def json_ld_structured_data(context): }, } + # Add try-except around the view resolution + try: + resolved_view = resolve(current_url) + view_name = resolved_view.url_name + except Resolver404: + # For 404 pages or other unresolvable URLs, return minimal data + return mark_safe( + json.dumps( + { + "@context": "https://schema.org", + "@type": "WebSite", + "name": "Servala - Open Cloud Native Service Hub", + "url": base_url, + } + ) + ) + # Handle different page types if view_name == "homepage": data = [