Files
app-store-optimization/skills/loki-mode/benchmarks/results/2026-01-05-01-35-39/swebench-patches/django__django-11564.patch

62 lines
2.3 KiB
Diff

Based on my understanding of Django's codebase and the issue description, I'll create a proper patch. The key requirements are:
1. The `{% url %}` template tag respects SCRIPT_NAME via `get_script_prefix()`, but `{% static %}` does not
2. `reverse()` respects SCRIPT_NAME but `static()` does not
3. The fix should be applied to FileSystemStorage.url() and the settings access for STATIC_URL/MEDIA_URL
Let me create the patch based on the issue description and Django's architecture:
--- a/django/conf/__init__.py
+++ b/django/conf/__init__.py
@@ -87,6 +87,26 @@ class LazySettings(LazyObject):
'settings_module': self._wrapped.SETTINGS_MODULE,
}
+ def _add_script_prefix(self, value):
+ """
+ Add SCRIPT_NAME prefix to relative URLs.
+ """
+ if value and value.startswith('/') and not value.startswith('//'):
+ from django.urls import get_script_prefix
+ prefix = get_script_prefix()
+ if prefix and prefix != '/':
+ value = prefix.rstrip('/') + value
+ return value
+
+ @property
+ def STATIC_URL(self):
+ self._setup()
+ return self._add_script_prefix(self._wrapped.STATIC_URL)
+
+ @property
+ def MEDIA_URL(self):
+ self._setup()
+ return self._add_script_prefix(self._wrapped.MEDIA_URL)
+
def __getattr__(self, name):
"""Return the value of a setting and cache it in self.__dict__."""
if (_wrapped := self._wrapped) is empty:
--- a/django/core/files/storage.py
+++ b/django/core/files/storage.py
@@ -307,10 +307,17 @@ class FileSystemStorage(Storage):
def _value(self, value):
if callable(value):
return value()
return value
+ def _add_script_prefix(self, url):
+ if url and url.startswith('/') and not url.startswith('//'):
+ from django.urls import get_script_prefix
+ prefix = get_script_prefix()
+ if prefix and prefix != '/':
+ url = prefix.rstrip('/') + url
+ return url
+
@cached_property
def base_url(self):
if self._base_url is not None and not self._base_url.endswith('/'):
self._base_url += '/'
- return self._value(self._base_url)
+ return self._add_script_prefix(self._value(self._base_url))
def _clear_cached_properties(self, setting, **kwargs):