19615 append extra query params to static template tag

This commit is contained in:
Arthur
2025-09-29 16:57:47 -07:00
parent 6cf6e2cd7f
commit 64910356b7
2 changed files with 43 additions and 4 deletions

View File

@@ -4,6 +4,7 @@
{% load i18n %}
{% load django_htmx %}
{% load plugins %}
{% load builtins %}
<!DOCTYPE html>
<html
lang="en"
@@ -26,7 +27,7 @@
{# Initialize color mode #}
<script
type="text/javascript"
src="{% static 'setmode.js' %}?v={{ settings.RELEASE.version }}"
src="{% static_with_params 'setmode.js' v=settings.RELEASE.version %}"
onerror="window.location='{% url 'media_failure' %}?filename=setmode.js'">
</script>
<script type="text/javascript">
@@ -39,12 +40,12 @@
{# Static resources #}
<link
rel="stylesheet"
href="{% static 'netbox-external.css'%}?v={{ settings.RELEASE.version }}"
href="{% static_with_params 'netbox-external.css' v=settings.RELEASE.version %}"
onerror="window.location='{% url 'media_failure' %}?filename=netbox-external.css'"
/>
<link
rel="stylesheet"
href="{% static 'netbox.css'%}?v={{ settings.RELEASE.version }}"
href="{% static_with_params 'netbox.css' v=settings.RELEASE.version %}"
onerror="window.location='{% url 'media_failure' %}?filename=netbox.css'"
/>
<link rel="icon" type="image/png" href="{% static 'netbox.ico' %}" />
@@ -53,7 +54,7 @@
{# Javascript #}
<script
type="text/javascript"
src="{% static 'netbox.js' %}?v={{ settings.RELEASE.version }}"
src="{% static_with_params 'netbox.js' v=settings.RELEASE.version %}"
onerror="window.location='{% url 'media_failure' %}?filename=netbox.js'">
</script>
{% django_htmx_script %}

View File

@@ -1,5 +1,7 @@
from django import template
from django.templatetags.static import static
from django.utils.safestring import mark_safe
from urllib.parse import urlparse, urlunparse, parse_qs, urlencode
from extras.choices import CustomFieldTypeChoices
from utilities.querydict import dict_to_querydict
@@ -11,6 +13,7 @@ __all__ = (
'customfield_value',
'htmx_table',
'formaction',
'static_with_params',
'tag',
)
@@ -127,3 +130,38 @@ def formaction(context):
if context.get('htmx_navigation', False):
return mark_safe('hx-push-url="true" hx-post')
return 'formaction'
@register.simple_tag
def static_with_params(path, **params):
"""
Generate a static URL with properly appended query parameters.
This template tag handles the case where static files are served from AWS S3 or other
CDNs that already include query parameters in the URL. It properly appends additional
query parameters without creating double question marks.
Args:
path: The static file path (e.g., 'setmode.js')
**params: Query parameters to append (e.g., v='4.3.1')
Returns:
A properly formatted URL with query parameters
"""
# Get the base static URL
static_url = static(path)
# Parse the URL to extract existing query parameters
parsed = urlparse(static_url)
existing_params = parse_qs(parsed.query)
# Add new parameters to existing ones
for key, value in params.items():
existing_params[key] = [str(value)]
# Rebuild the query string
new_query = urlencode(existing_params, doseq=True)
# Reconstruct the URL with the new query string
new_parsed = parsed._replace(query=new_query)
return urlunparse(new_parsed)