diff --git a/django/website/tabbed_page/templatetags/render_tab.py b/django/website/tabbed_page/templatetags/render_tab.py
index c735d427f824568c0033d2679cae5e70dc97044b..180d86506a25ae90610f4ac2e617d21074a6ec9c 100644
--- a/django/website/tabbed_page/templatetags/render_tab.py
+++ b/django/website/tabbed_page/templatetags/render_tab.py
@@ -1,9 +1,14 @@
+from django import template
 from django.template.loader import render_to_string
 
 from ..tab_pool import get_tab
 
 
-def render_tab(tab_instance):
+register = template.Library()
+
+
+@register.simple_tag(takes_context=True)
+def render_tab(context, tab_instance):
     tab = get_tab(tab_instance.name)
 
     template_name = tab.template_name
@@ -13,6 +18,13 @@ def render_tab(tab_instance):
     else:
         settings = {}  # TODO: json field doesn't default to this?
 
-    context = tab.get_context_data(**settings)
+    tab_details = tab.get_context_data(**settings)
+
+    if context:  # TODO: Only used for testing?
+        request = context.get('request')
+    else:
+        request = None
 
-    return render_to_string(template_name, context)
+    return render_to_string(template_name,
+                            context=tab_details,
+                            request=request)
diff --git a/django/website/tabbed_page/tests/render_tests.py b/django/website/tabbed_page/tests/render_tests.py
index 2084d2f913e9e0ce0d77fceab040ad4abb8e5eeb..dc22ff9f80b58d6a3f4aa49f94ed514e6b9b6147 100644
--- a/django/website/tabbed_page/tests/render_tests.py
+++ b/django/website/tabbed_page/tests/render_tests.py
@@ -27,9 +27,10 @@ def test_uses_template_name(mock_render):
     page = TabbedPageFactory()
     tab_instance = TabInstanceFactory(page=page, name='test-tab')
 
-    render_tab(tab_instance)
+    render_tab(None, tab_instance)
 
-    mock_render.assert_called_once_with('test-tab-template', {})
+    args, _ = mock_render.call_args
+    assert args[0] == 'test-tab-template'
 
 
 @pytest.mark.django_db
@@ -44,9 +45,27 @@ def test_uses_context(mock_render):
 
     tab_instance = TabInstanceFactory(page=page, name='test-tab')
 
-    render_tab(tab_instance)
+    render_tab(None, tab_instance)
 
-    mock_render.assert_called_once_with(None, test_context)
+    _, kwargs = mock_render.call_args
+    assert kwargs['context'] == test_context
+
+
+@pytest.mark.django_db
+@patch(render_to_string_method)
+def test_uses_request(mock_render):
+    tab = TestTab()
+    register_tab('test-tab', tab)
+
+    page = TabbedPageFactory()
+    tab_instance = TabInstanceFactory(page=page, name='test-tab')
+
+    request = 'a request'
+    context = {'request': request}
+    render_tab(context, tab_instance)
+
+    _, kwargs = mock_render.call_args
+    assert kwargs['request'] == request
 
 
 @pytest.mark.django_db
@@ -62,6 +81,7 @@ def test_settings_passed_to_widget_get_context_data(render_to_string_method):
         tab_instance = TabInstanceFactory(page=page,
                                           name='test-tab',
                                           settings=settings)
-        render_tab(tab_instance)
+        render_tab(None, tab_instance)
 
-    mock_get_context.assert_called_once_with(columns=columns)
+    _, kwargs = mock_get_context.call_args
+    assert kwargs['columns'] == columns