From d54638727ae23e8dc1e1ed0823efbd15806d9778 Mon Sep 17 00:00:00 2001
From: Alex Gaynor <alex.gaynor@gmail.com>
Date: Sun, 8 Feb 2015 12:24:11 -0600
Subject: [PATCH] [1.8.x] Simplified the lazy CSRF token implementation in csrf
 context processor.

This significantly improves performance on PyPy. The previous
implementation would generate a new class on every single request,
which is relatively slow.

Backport of 8099d33b6553c9ee7de779ae9d191a1bf22adbda from master
---
 django/template/context_processors.py | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/django/template/context_processors.py b/django/template/context_processors.py
index dcd737f4ae..a81fe71829 100644
--- a/django/template/context_processors.py
+++ b/django/template/context_processors.py
@@ -11,9 +11,8 @@ from __future__ import unicode_literals
 
 from django.conf import settings
 from django.middleware.csrf import get_token
-from django.utils import six
 from django.utils.encoding import smart_text
-from django.utils.functional import lazy
+from django.utils.functional import SimpleLazyObject, lazy
 
 
 def csrf(request):
@@ -30,9 +29,8 @@ def csrf(request):
             return 'NOTPROVIDED'
         else:
             return smart_text(token)
-    _get_val = lazy(_get_val, six.text_type)
 
-    return {'csrf_token': _get_val()}
+    return {'csrf_token': SimpleLazyObject(_get_val)}
 
 
 def debug(request):