Skip to content

Commit 5839809

Browse files
authored
Merge pull request #203 from pglotov/isPreload
Add rel="preload" option for JS/CSS
2 parents 02ed722 + 075eba3 commit 5839809

File tree

4 files changed

+45
-9
lines changed

4 files changed

+45
-9
lines changed

tests/app/templates/preload.html

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{% load render_bundle from webpack_loader %}
2+
<!DOCTYPE html>
3+
<html>
4+
<head>
5+
<meta charset="UTF-8">
6+
<title>Example</title>
7+
{% render_bundle 'main' 'css' is_preload=True %}
8+
{% render_bundle 'main' 'js' is_preload=True %}
9+
10+
{% render_bundle 'main' 'css' %}
11+
</head>
12+
13+
<body>
14+
{% render_bundle 'main' 'js' %}
15+
</body>
16+
</html>

tests/app/tests/test_webpack.py

+14
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,20 @@ def test_templatetags(self):
142142
result = view(request)
143143
self.assertIn('<img src="http://custom-static-host.com/my-image.png"/>', result.rendered_content)
144144

145+
def test_preload(self):
146+
self.compile_bundles('webpack.config.simple.js')
147+
view = TemplateView.as_view(template_name='preload.html')
148+
request = self.factory.get('/')
149+
result = view(request)
150+
151+
# Preload
152+
self.assertIn('<link href="/static/django_webpack_loader_bundles/main.css" rel="preload" as="style" />', result.rendered_content)
153+
self.assertIn('<link rel="preload" as="script" href="/static/django_webpack_loader_bundles/main.js" />', result.rendered_content)
154+
155+
# Resources
156+
self.assertIn('<link href="/static/django_webpack_loader_bundles/main.css" rel="stylesheet" />', result.rendered_content)
157+
self.assertIn('<script src="/static/django_webpack_loader_bundles/main.js" ></script>', result.rendered_content)
158+
145159
def test_jinja2(self):
146160
self.compile_bundles('webpack.config.simple.js')
147161
self.compile_bundles('webpack.config.app2.js')

webpack_loader/templatetags/webpack_loader.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99

1010
@register.simple_tag
11-
def render_bundle(bundle_name, extension=None, config='DEFAULT', attrs=''):
12-
tags = utils.get_as_tags(bundle_name, extension=extension, config=config, attrs=attrs)
11+
def render_bundle(bundle_name, extension=None, config='DEFAULT', attrs='', is_preload=False):
12+
tags = utils.get_as_tags(bundle_name, extension=extension, config=config, attrs=attrs, is_preload=is_preload)
1313
return mark_safe('\n'.join(tags))
1414

1515

@@ -19,6 +19,8 @@ def webpack_static(asset_name, config='DEFAULT'):
1919

2020

2121
assignment_tag = register.simple_tag if VERSION >= (1, 9) else register.assignment_tag
22+
23+
2224
@assignment_tag
2325
def get_files(bundle_name, extension=None, config='DEFAULT'):
2426
"""

webpack_loader/utils.py

+11-7
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from django.conf import settings
33
from .config import load_config
44

5-
65
_loaders = {}
76

87

@@ -48,7 +47,7 @@ def get_files(bundle_name, extension=None, config='DEFAULT'):
4847
return list(_get_bundle(bundle_name, extension, config))
4948

5049

51-
def get_as_tags(bundle_name, extension=None, config='DEFAULT', attrs=''):
50+
def get_as_tags(bundle_name, extension=None, config='DEFAULT', attrs='', is_preload=False):
5251
'''
5352
Get a list of formatted <script> & <link> tags for the assets in the
5453
named bundle.
@@ -63,13 +62,18 @@ def get_as_tags(bundle_name, extension=None, config='DEFAULT', attrs=''):
6362
tags = []
6463
for chunk in bundle:
6564
if chunk['name'].endswith(('.js', '.js.gz')):
66-
tags.append((
67-
'<script src="{0}" {1}></script>'
68-
).format(chunk['url'], attrs))
65+
if is_preload:
66+
tags.append((
67+
'<link rel="preload" as="script" href="{0}" {1}/>'
68+
).format(chunk['url'], attrs))
69+
else:
70+
tags.append((
71+
'<script src="{0}" {1}></script>'
72+
).format(chunk['url'], attrs))
6973
elif chunk['name'].endswith(('.css', '.css.gz')):
7074
tags.append((
71-
'<link href="{0}" rel="stylesheet" {1}/>'
72-
).format(chunk['url'], attrs))
75+
'<link href="{0}" rel={2} {1}/>'
76+
).format(chunk['url'], attrs, '"stylesheet"' if not is_preload else '"preload" as="style"'))
7377
return tags
7478

7579

0 commit comments

Comments
 (0)