import json
|
from pathlib import Path
|
|
from django.conf import settings
|
|
# Load manifest.json once at module scope
|
_MANIFEST = {}
|
try:
|
# If HMR is enabled, we don't need to read the manifest as it's not used
|
# All assets are served from the webpack dev server in that case
|
if not settings.FRONTEND_HMR:
|
manifest_path = Path(settings.STATIC_ROOT) / 'js/manifest.json'
|
if manifest_path.exists():
|
with open(manifest_path, 'r') as f:
|
_MANIFEST = json.load(f)
|
except Exception:
|
# If there's any error reading the manifest, we'll use the default mapping
|
pass
|
|
|
def get_manifest_asset(path: str) -> str:
|
"""Maps a path to its hashed filename using manifest.json, or falls back to /react-app/ prefix
|
|
Usage in template:
|
{% manifest_asset 'main.js' %}
|
"""
|
if path in _MANIFEST:
|
return f'{settings.FRONTEND_HOSTNAME}{_MANIFEST[path]}'
|
return f'{settings.FRONTEND_HOSTNAME}/react-app/{path}'
|