Merge branch 'navactive' into 'v4.x'

Errors thrown here cause 404 error handling to fail. 404s cant url resolve.

See merge request allianceauth/allianceauth!1598
This commit is contained in:
Ariel Rin 2024-02-24 04:42:48 +00:00
commit 49fb6c39d5

View File

@ -23,6 +23,7 @@ THE SOFTWARE.
""" """
from django.template import Library from django.template import Library
from django.urls import resolve from django.urls import resolve
from django.urls.exceptions import Resolver404
from django.conf import settings from django.conf import settings
import re import re
@ -45,19 +46,23 @@ def navactive(request, urls):
{% navactive request "view_name another_view_name" %} {% navactive request "view_name another_view_name" %}
""" """
url_list = set(urls.split()) url_list = set(urls.split())
try:
resolved = resolve(request.path) resolved = resolve(request.path)
resolved_urls = set() resolved_urls = set()
if resolved.url_name: if resolved.url_name:
resolved_urls.add(resolved.url_name) resolved_urls.add(resolved.url_name)
if resolved.namespaces: if resolved.namespaces:
resolved_urls = resolved_urls.union([f"{namespace}:{resolved.url_name}" for namespace in resolved.namespaces]) resolved_urls = resolved_urls.union(
resolved_urls = resolved_urls.union([f"{namespace}:" for namespace in resolved.namespaces]) [f"{namespace}:{resolved.url_name}" for namespace in resolved.namespaces])
if getattr(resolved, 'app_name', None): resolved_urls = resolved_urls.union([f"{namespace}:" for namespace in resolved.namespaces])
resolved_urls = resolved_urls.union([f"{resolved.app_name}:{resolved.url_name}", f"{resolved.app_name}:"]) if getattr(resolved, 'app_name', None):
if getattr(resolved, 'app_names', []): resolved_urls = resolved_urls.union([f"{resolved.app_name}:{resolved.url_name}", f"{resolved.app_name}:"])
resolved_urls = resolved_urls.union([f"{app_name}:{resolved.url_name}" for app_name in resolved.app_names]) if getattr(resolved, 'app_names', []):
resolved_urls = resolved_urls.union([f"{app_name}:" for app_name in resolved.app_names]) resolved_urls = resolved_urls.union([f"{app_name}:{resolved.url_name}" for app_name in resolved.app_names])
if url_list and resolved_urls and bool(resolved_urls & url_list): resolved_urls = resolved_urls.union([f"{app_name}:" for app_name in resolved.app_names])
return getattr(settings, "NAVHELPER_ACTIVE_CLASS", "active") 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", "") return getattr(settings, "NAVHELPER_NOT_ACTIVE_CLASS", "")