diff --git a/allianceauth/thirdparty/navhelper/templatetags/navactive.py b/allianceauth/thirdparty/navhelper/templatetags/navactive.py index 4bd91698..f9b34610 100644 --- a/allianceauth/thirdparty/navhelper/templatetags/navactive.py +++ b/allianceauth/thirdparty/navhelper/templatetags/navactive.py @@ -23,6 +23,7 @@ THE SOFTWARE. """ from django.template import Library from django.urls import resolve +from django.urls.exceptions import Resolver404 from django.conf import settings import re @@ -45,19 +46,23 @@ def navactive(request, urls): {% navactive request "view_name another_view_name" %} """ url_list = set(urls.split()) - - resolved = resolve(request.path) - resolved_urls = set() - if resolved.url_name: - resolved_urls.add(resolved.url_name) - if resolved.namespaces: - resolved_urls = resolved_urls.union([f"{namespace}:{resolved.url_name}" for namespace in resolved.namespaces]) - resolved_urls = resolved_urls.union([f"{namespace}:" for namespace in resolved.namespaces]) - if getattr(resolved, 'app_name', None): - resolved_urls = resolved_urls.union([f"{resolved.app_name}:{resolved.url_name}", f"{resolved.app_name}:"]) - if getattr(resolved, 'app_names', []): - resolved_urls = resolved_urls.union([f"{app_name}:{resolved.url_name}" for app_name in resolved.app_names]) - resolved_urls = resolved_urls.union([f"{app_name}:" for app_name in resolved.app_names]) - if url_list and resolved_urls and bool(resolved_urls & url_list): - return getattr(settings, "NAVHELPER_ACTIVE_CLASS", "active") + try: + resolved = resolve(request.path) + resolved_urls = set() + if resolved.url_name: + resolved_urls.add(resolved.url_name) + if resolved.namespaces: + resolved_urls = resolved_urls.union( + [f"{namespace}:{resolved.url_name}" for namespace in resolved.namespaces]) + resolved_urls = resolved_urls.union([f"{namespace}:" for namespace in resolved.namespaces]) + if getattr(resolved, 'app_name', None): + resolved_urls = resolved_urls.union([f"{resolved.app_name}:{resolved.url_name}", f"{resolved.app_name}:"]) + if getattr(resolved, 'app_names', []): + resolved_urls = resolved_urls.union([f"{app_name}:{resolved.url_name}" for app_name in resolved.app_names]) + resolved_urls = resolved_urls.union([f"{app_name}:" for app_name in resolved.app_names]) + if url_list and resolved_urls and bool(resolved_urls & url_list): + return getattr(settings, "NAVHELPER_ACTIVE_CLASS", "active") + except Resolver404: + pass + # 404 errors can't url resolve return getattr(settings, "NAVHELPER_NOT_ACTIVE_CLASS", "")