diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index ba3a2d8a6..7a10805c8 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -34,6 +34,7 @@ Changelog
* Fix: Very long words in page listings are now broken where necessary (Kevin Howbrook)
* Fix: Language chosen in user preferences no longer persists on subsequent requests (Bojan Mihelac)
* Fix: Prevent new block IDs from being assigned on repeated calls to `StreamBlock.get_prep_value` (Colin Klein)
+ * Fix: Prevent broken images in notification emails when static files are hosted on a remote domain (Eduard Luca)
2.6.1 (05.08.2019)
diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst
index 0225806b2..4eb70fdfd 100644
--- a/CONTRIBUTORS.rst
+++ b/CONTRIBUTORS.rst
@@ -396,6 +396,7 @@ Contributors
* Dani Hodovic
* Janne Alatalo
* Colin Klein
+* Eduard Luca
Translators
===========
diff --git a/docs/releases/2.7.rst b/docs/releases/2.7.rst
index 93723d8b4..e029e227e 100644
--- a/docs/releases/2.7.rst
+++ b/docs/releases/2.7.rst
@@ -58,6 +58,7 @@ Bug fixes
* Very long words in page listings are now broken where necessary (Kevin Howbrook)
* Language chosen in user preferences no longer persists on subsequent requests (Bojan Mihelac)
* Prevent new block IDs from being assigned on repeated calls to ``StreamBlock.get_prep_value`` (Colin Klein)
+ * Prevent broken images in notification emails when static files are hosted on a remote domain (Eduard Luca)
Upgrade considerations
diff --git a/wagtail/admin/templates/wagtailadmin/notifications/base.html b/wagtail/admin/templates/wagtailadmin/notifications/base.html
index 9234257bb..8b83d98cb 100644
--- a/wagtail/admin/templates/wagtailadmin/notifications/base.html
+++ b/wagtail/admin/templates/wagtailadmin/notifications/base.html
@@ -1,4 +1,4 @@
-{% load i18n static %}
+{% load i18n wagtailadmin_tags %}
@@ -86,7 +86,7 @@ body[yahoo] .text {
- {% block branding_logo %} {% endblock %}
+ {% block branding_logo %} {% endblock %}
|
diff --git a/wagtail/admin/templatetags/wagtailadmin_tags.py b/wagtail/admin/templatetags/wagtailadmin_tags.py
index 3b6d1ab2a..c5f63d1a8 100644
--- a/wagtail/admin/templatetags/wagtailadmin_tags.py
+++ b/wagtail/admin/templatetags/wagtailadmin_tags.py
@@ -1,6 +1,8 @@
import itertools
import json
+from urllib.parse import urljoin
+
from django import template
from django.conf import settings
from django.contrib.admin.utils import quote
@@ -480,3 +482,12 @@ def avatar_url(user, size=50):
@register.simple_tag
def js_translation_strings():
return mark_safe(json.dumps(get_js_translation_strings()))
+
+
+@register.simple_tag
+def notification_static(path):
+ """
+ Variant of the {% static %}` tag for use in notification emails - tries to form
+ a full URL using BASE_URL if the static URL isn't already a full URL.
+ """
+ return urljoin(base_url_setting(), static(path))
diff --git a/wagtail/admin/tests/test_templatetags.py b/wagtail/admin/tests/test_templatetags.py
index 265c39051..b80e9ad89 100644
--- a/wagtail/admin/tests/test_templatetags.py
+++ b/wagtail/admin/tests/test_templatetags.py
@@ -2,7 +2,7 @@ from django.contrib.auth import get_user_model
from django.test import TestCase
from django.test.utils import override_settings
-from wagtail.admin.templatetags.wagtailadmin_tags import avatar_url
+from wagtail.admin.templatetags.wagtailadmin_tags import avatar_url, notification_static
from wagtail.images.tests.utils import get_test_image_file
from wagtail.users.models import UserProfile
@@ -42,3 +42,20 @@ class TestAvatarTemplateTag(TestCase):
url = avatar_url(self.test_user)
self.assertIn('custom-avatar', url)
+
+
+class TestNotificationStaticTemplateTag(TestCase):
+ @override_settings(STATIC_URL='/static/')
+ def test_local_notification_static(self):
+ url = notification_static('wagtailadmin/images/email-header.jpg')
+ self.assertEqual('/static/wagtailadmin/images/email-header.jpg', url)
+
+ @override_settings(STATIC_URL='/static/', BASE_URL='http://localhost:8000')
+ def test_local_notification_static_baseurl(self):
+ url = notification_static('wagtailadmin/images/email-header.jpg')
+ self.assertEqual('http://localhost:8000/static/wagtailadmin/images/email-header.jpg', url)
+
+ @override_settings(STATIC_URL='https://s3.amazonaws.com/somebucket/static/', BASE_URL='http://localhost:8000')
+ def test_remote_notification_static(self):
+ url = notification_static('wagtailadmin/images/email-header.jpg')
+ self.assertEqual('https://s3.amazonaws.com/somebucket/static/wagtailadmin/images/email-header.jpg', url)