Skip to content

Commit f15bd05

Browse files
Fix static URLs to include django_bird prefix (#219)
* Fix static URLs to include django_bird prefix The BirdAssetStorage class wasn't applying the 'django_bird' prefix to generated static URLs, causing a mismatch between collection paths and URL paths. Added an override to the URL method that ensures the prefix is applied. * Update changelog for upcoming release with staticfiles URL fix
1 parent 6641de5 commit f15bd05

File tree

4 files changed

+47
-20
lines changed

4 files changed

+47
-20
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ and this project attempts to adhere to [Semantic Versioning](https://semver.org/
1818

1919
## [Unreleased]
2020

21+
### Fixed
22+
23+
- Fixed static asset URLs to properly include the 'django_bird' prefix, ensuring URLs match the actual file paths during collection
24+
2125
## [0.17.0]
2226

2327
🚨 This release contains some breaking changes. See the Removed section for more information. 🚨

src/django_bird/staticfiles.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,14 @@ def __init__(self, *args: Any, prefix: str, **kwargs: Any):
174174
super().__init__(*args, **kwargs)
175175
self.prefix = prefix
176176

177+
@override
178+
def url(self, name: str | None) -> str:
179+
if name is None:
180+
return super().url(name)
181+
if not name.startswith(f"{self.prefix}/"):
182+
name = f"{self.prefix}/{name}"
183+
return super().url(name)
184+
177185

178186
@final
179187
class BirdAssetFinder(BaseFinder):

tests/templatetags/test_asset.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,21 @@ def test_template_inheritence(self, create_template, templates_dir, registry):
103103
rendered = template.render({})
104104

105105
assert (
106-
f'<link rel="stylesheet" href="/static/bird/{alert_css.file.name}">'
106+
f'<link rel="stylesheet" href="/static/django_bird/bird/{alert_css.file.name}">'
107107
in rendered
108108
)
109109
assert (
110-
f'<link rel="stylesheet" href="/static/bird/{button_css.file.name}">'
110+
f'<link rel="stylesheet" href="/static/django_bird/bird/{button_css.file.name}">'
111+
in rendered
112+
)
113+
assert (
114+
f'<script src="/static/django_bird/bird/{alert_js.file.name}"></script>'
115+
in rendered
116+
)
117+
assert (
118+
f'<script src="/static/django_bird/bird/{button_js.file.name}"></script>'
111119
in rendered
112120
)
113-
assert f'<script src="/static/bird/{alert_js.file.name}"></script>' in rendered
114-
assert f'<script src="/static/bird/{button_js.file.name}"></script>' in rendered
115121

116122
def test_template_inheritence_no_bird_usage(
117123
self, create_template, templates_dir, registry
@@ -154,10 +160,13 @@ def test_template_inheritence_no_bird_usage(
154160
rendered = template.render({})
155161

156162
assert (
157-
f'<link rel="stylesheet" href="/static/bird/{alert_css.file.name}">'
163+
f'<link rel="stylesheet" href="/static/django_bird/bird/{alert_css.file.name}">'
164+
in rendered
165+
)
166+
assert (
167+
f'<script src="/static/django_bird/bird/{alert_js.file.name}"></script>'
158168
in rendered
159169
)
160-
assert f'<script src="/static/bird/{alert_js.file.name}"></script>' in rendered
161170

162171
def test_with_no_assets(self, create_template, templates_dir):
163172
TestComponent(
@@ -232,21 +241,21 @@ def test_component_render_order(self, create_template, templates_dir, registry):
232241

233242
head_end = rendered.find("</head>")
234243
assert (
235-
f'<link rel="stylesheet" href="/static/bird/{first_css.file.name}">'
244+
f'<link rel="stylesheet" href="/static/django_bird/bird/{first_css.file.name}">'
236245
in rendered[:head_end]
237246
)
238247
assert (
239-
f'<link rel="stylesheet" href="/static/bird/{second_css.file.name}">'
248+
f'<link rel="stylesheet" href="/static/django_bird/bird/{second_css.file.name}">'
240249
in rendered[:head_end]
241250
)
242251

243252
body_start = rendered.find("<body")
244253
assert (
245-
f'<script src="/static/bird/{first_js.file.name}"></script>'
254+
f'<script src="/static/django_bird/bird/{first_js.file.name}"></script>'
246255
in rendered[body_start:]
247256
)
248257
assert (
249-
f'<script src="/static/bird/{second_js.file.name}"></script>'
258+
f'<script src="/static/django_bird/bird/{second_js.file.name}"></script>'
250259
in rendered[body_start:]
251260
)
252261

@@ -294,12 +303,14 @@ def test_asset_duplication(self, create_template, templates_dir, registry):
294303

295304
assert (
296305
rendered.count(
297-
f'<link rel="stylesheet" href="/static/bird/{alert_css.file.name}">'
306+
f'<link rel="stylesheet" href="/static/django_bird/bird/{alert_css.file.name}">'
298307
)
299308
== 1
300309
)
301310
assert (
302-
rendered.count(f'<script src="/static/bird/{alert_js.file.name}"></script>')
311+
rendered.count(
312+
f'<script src="/static/django_bird/bird/{alert_js.file.name}"></script>'
313+
)
303314
== 1
304315
)
305316

@@ -356,16 +367,19 @@ def test_unused_component_asset_not_rendered(
356367
rendered = template.render({})
357368

358369
assert (
359-
f'<link rel="stylesheet" href="/static/bird/{alert_css.file.name}">'
370+
f'<link rel="stylesheet" href="/static/django_bird/bird/{alert_css.file.name}">'
371+
in rendered
372+
)
373+
assert (
374+
f'<script src="/static/django_bird/bird/{alert_js.file.name}"></script>'
360375
in rendered
361376
)
362-
assert f'<script src="/static/bird/{alert_js.file.name}"></script>' in rendered
363377
assert (
364-
f'<link rel="stylesheet" href="/static/bird/{button_css.file.name}">'
378+
f'<link rel="stylesheet" href="/static/django_bird/bird/{button_css.file.name}">'
365379
not in rendered
366380
)
367381
assert (
368-
f'<script src="/static/bird/{button_js.file.name}"></script>'
382+
f'<script src="/static/django_bird/bird/{button_js.file.name}"></script>'
369383
not in rendered
370384
)
371385

@@ -425,7 +439,7 @@ def test_asset_tag_with_manifest_in_production(
425439
rendered = template.render({})
426440

427441
assert (
428-
f'<link rel="stylesheet" href="/static/bird/{button_css.file.name}">'
442+
f'<link rel="stylesheet" href="/static/django_bird/bird/{button_css.file.name}">'
429443
in rendered
430444
)
431445

@@ -466,7 +480,7 @@ def test_asset_tag_in_debug_mode(
466480
rendered = template.render({})
467481

468482
assert (
469-
f'<link rel="stylesheet" href="/static/bird/{button_css.file.name}">'
483+
f'<link rel="stylesheet" href="/static/django_bird/bird/{button_css.file.name}">'
470484
in rendered
471485
)
472486

@@ -513,7 +527,7 @@ def test_asset_tag_fallback_when_template_not_in_manifest(
513527
rendered = template.render({})
514528

515529
assert (
516-
f'<link rel="stylesheet" href="/static/bird/{button_css.file.name}">'
530+
f'<link rel="stylesheet" href="/static/django_bird/bird/{button_css.file.name}">'
517531
in rendered
518532
)
519533

tests/test_staticfiles.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,8 @@ def test_url(self, templates_dir):
213213
asset = component.get_asset(button_css.file.name)
214214

215215
assert (
216-
asset.url == f"/static/{button_css.file.parent.name}/{button_css.file.name}"
216+
asset.url
217+
== f"/static/django_bird/{button_css.file.parent.name}/{button_css.file.name}"
217218
)
218219

219220
def test_url_nonexistent(self, templates_dir):

0 commit comments

Comments
 (0)