diff --git a/aws_xray_sdk/ext/django/templates.py b/aws_xray_sdk/ext/django/templates.py
index 1eaa7736..a77f766b 100644
--- a/aws_xray_sdk/ext/django/templates.py
+++ b/aws_xray_sdk/ext/django/templates.py
@@ -1,6 +1,7 @@
import logging
from django.template import Template
+from django.utils.safestring import SafeString
from aws_xray_sdk.core import xray_recorder
@@ -22,6 +23,10 @@ def xray_render(self, context):
template_name = self.name or getattr(context, 'template_name', None)
if template_name:
name = str(template_name)
+ # SafeString are not properly serialized by jsonpickle,
+ # turn them back to str by adding a non-safe str.
+ if isinstance(name, SafeString):
+ name += ''
subsegment = xray_recorder.current_subsegment()
if subsegment:
subsegment.name = name
diff --git a/tests/ext/django/app/settings.py b/tests/ext/django/app/settings.py
index 6a78b6d6..3d33737d 100644
--- a/tests/ext/django/app/settings.py
+++ b/tests/ext/django/app/settings.py
@@ -44,7 +44,6 @@
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
diff --git a/tests/ext/django/app/templates/block.html b/tests/ext/django/app/templates/block.html
new file mode 100644
index 00000000..cb179d16
--- /dev/null
+++ b/tests/ext/django/app/templates/block.html
@@ -0,0 +1 @@
+
Hello World
diff --git a/tests/ext/django/app/templates/block_user.html b/tests/ext/django/app/templates/block_user.html
new file mode 100644
index 00000000..bfa2c370
--- /dev/null
+++ b/tests/ext/django/app/templates/block_user.html
@@ -0,0 +1,10 @@
+
+
+
+
+Django Test App
+
+{% include "block.html" %}
+
+
+
diff --git a/tests/ext/django/app/views.py b/tests/ext/django/app/views.py
index 6bb5edf9..1b3b6f62 100644
--- a/tests/ext/django/app/views.py
+++ b/tests/ext/django/app/views.py
@@ -9,6 +9,10 @@ class IndexView(TemplateView):
template_name = 'index.html'
+class TemplateBlockView(TemplateView):
+ template_name = 'block_user.html'
+
+
def ok(request):
return HttpResponse(status=200)
@@ -32,4 +36,5 @@ def call_db(request):
url(r'^500fault/$', fault, name='500fault'),
url(r'^call_db/$', call_db, name='call_db'),
url(r'^template/$', IndexView.as_view(), name='template'),
+ url(r'^template_block/$', TemplateBlockView.as_view(), name='template_block'),
]
diff --git a/tests/ext/django/test_middleware.py b/tests/ext/django/test_middleware.py
index 3c89c51e..8388b386 100644
--- a/tests/ext/django/test_middleware.py
+++ b/tests/ext/django/test_middleware.py
@@ -1,6 +1,6 @@
import django
from aws_xray_sdk import global_sdk_config
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from django.test import TestCase
from aws_xray_sdk.core import xray_recorder, lambda_launcher
@@ -90,6 +90,17 @@ def test_template(self):
assert not subsegment.in_progress
assert subsegment.namespace == 'local'
+ def test_template_block(self):
+ url = reverse('template_block')
+ self.client.get(url)
+ segment = xray_recorder.emitter.pop()
+ assert len(segment.subsegments) == 1
+
+ subsegment = segment.subsegments[0]
+ assert subsegment.name == 'block_user.html'
+ assert not subsegment.in_progress
+ assert subsegment.namespace == 'local'
+
def test_trace_header_data_perservation(self):
url = reverse('200ok')
self.client.get(url, HTTP_X_AMZN_TRACE_ID='k1=v1')
diff --git a/tox.ini b/tox.ini
index d829182d..6039e008 100644
--- a/tox.ini
+++ b/tox.ini
@@ -19,7 +19,7 @@ deps =
Flask-SQLAlchemy
future
# the sdk doesn't support earlier version of django
- django >= 1.10, <2.0
+ django >= 1.10
django-fake-model
pynamodb >= 3.3.1
psycopg2