diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index 12d26dd4b7..496a8bc5b7 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -102,7 +102,7 @@ TEMPLATE_LOADERS = ( # 'django.template.loaders.eggs.load_template_source', ) -# List of processors used by DjangoContext to populate the context. +# List of processors used by RequestContext to populate the context. # Each one should be a callable that takes the request object as its # only parameter and returns a dictionary to add to the context. TEMPLATE_CONTEXT_PROCESSORS = ( diff --git a/django/contrib/admin/views/changelist.py b/django/contrib/admin/views/changelist.py index b6121dc074..d9de57be93 100644 --- a/django/contrib/admin/views/changelist.py +++ b/django/contrib/admin/views/changelist.py @@ -5,7 +5,7 @@ from django.db import models from django.db.models.query import handle_legacy_orderlist from django.http import HttpResponse, HttpResponseRedirect from django.core.paginator import ObjectPaginator, InvalidPage -from django.core.extensions import DjangoContext as Context +from django.template import RequestContext as Context from django.core.extensions import render_to_response from django.utils.dates import MONTHS # The system will display a "Show all" link only if the total result count diff --git a/django/contrib/admin/views/decorators.py b/django/contrib/admin/views/decorators.py index 5e74bfb217..57ac6cd5a9 100644 --- a/django/contrib/admin/views/decorators.py +++ b/django/contrib/admin/views/decorators.py @@ -1,4 +1,5 @@ -from django.core.extensions import DjangoContext, render_to_response +from django.core.extensions import render_to_response +from django.template import RequestContext from django.conf.settings import SECRET_KEY from django.contrib.auth.models import User, SESSION_KEY from django import http @@ -24,7 +25,7 @@ def _display_login_form(request, error_message=''): 'app_path': request.path, 'post_data': post_data, 'error_message': error_message - }, context_instance=DjangoContext(request)) + }, context_instance=RequestContext(request)) def _encode_post_data(post_data): pickled = pickle.dumps(post_data) diff --git a/django/contrib/admin/views/doc.py b/django/contrib/admin/views/doc.py index 27eeace5ee..b300c419f9 100644 --- a/django/contrib/admin/views/doc.py +++ b/django/contrib/admin/views/doc.py @@ -1,8 +1,9 @@ from django import template, templatetags +from django.template import RequestContext from django.conf import settings from django.contrib.admin.views.decorators import staff_member_required from django.db import models -from django.core.extensions import DjangoContext, render_to_response +from django.core.extensions import render_to_response from django.core.exceptions import ViewDoesNotExist from django.http import Http404 from django.core import urlresolvers @@ -16,7 +17,7 @@ MODEL_METHODS_EXCLUDE = ('_', 'add_', 'delete', 'save', 'set_') def doc_index(request): if not utils.docutils_is_available: return missing_docutils_page(request) - return render_to_response('admin_doc/index', context_instance=DjangoContext(request)) + return render_to_response('admin_doc/index', context_instance=RequestContext(request)) doc_index = staff_member_required(doc_index) def bookmarklets(request): @@ -24,7 +25,7 @@ def bookmarklets(request): admin_root = request.path[:-len('doc/bookmarklets/')] return render_to_response('admin_doc/bookmarklets', { 'admin_url': "%s://%s%s" % (os.environ.get('HTTPS') == 'on' and 'https' or 'http', request.META['HTTP_HOST'], admin_root), - }, context_instance=DjangoContext(request)) + }, context_instance=RequestContext(request)) bookmarklets = staff_member_required(bookmarklets) def template_tag_index(request): @@ -55,7 +56,7 @@ def template_tag_index(request): 'library': tag_library, }) - return render_to_response('admin_doc/template_tag_index', {'tags': tags}, context_instance=DjangoContext(request)) + return render_to_response('admin_doc/template_tag_index', {'tags': tags}, context_instance=RequestContext(request)) template_tag_index = staff_member_required(template_tag_index) def template_filter_index(request): @@ -85,7 +86,7 @@ def template_filter_index(request): 'meta': metadata, 'library': tag_library, }) - return render_to_response('admin_doc/template_filter_index', {'filters': filters}, context_instance=DjangoContext(request)) + return render_to_response('admin_doc/template_filter_index', {'filters': filters}, context_instance=RequestContext(request)) template_filter_index = staff_member_required(template_filter_index) def view_index(request): @@ -105,7 +106,7 @@ def view_index(request): 'site': Site.objects.get_object(pk=settings_mod.SITE_ID), 'url': simplify_regex(regex), }) - return render_to_response('admin_doc/view_index', {'views': views}, context_instance=DjangoContext(request)) + return render_to_response('admin_doc/view_index', {'views': views}, context_instance=RequestContext(request)) view_index = staff_member_required(view_index) def view_detail(request, view): @@ -129,7 +130,7 @@ def view_detail(request, view): 'summary': title, 'body': body, 'meta': metadata, - }, context_instance=DjangoContext(request)) + }, context_instance=RequestContext(request)) view_detail = staff_member_required(view_detail) def model_index(request): @@ -145,7 +146,7 @@ def model_index(request): 'module': opts.app_label, 'class': opts.module_name, }) - return render_to_response('admin_doc/model_index', {'models': models}, context_instance=DjangoContext(request)) + return render_to_response('admin_doc/model_index', {'models': models}, context_instance=RequestContext(request)) model_index = staff_member_required(model_index) def model_detail(request, model): @@ -187,7 +188,7 @@ def model_detail(request, model): 'name': '%s.%s' % (opts.app_label, opts.module_name), 'summary': "Fields on %s objects" % opts.verbose_name, 'fields': fields, - }, context_instance=DjangoContext(request)) + }, context_instance=RequestContext(request)) model_detail = staff_member_required(model_detail) def template_detail(request, template): @@ -207,7 +208,7 @@ def template_detail(request, template): return render_to_response('admin_doc/template_detail', { 'name': template, 'templates': templates, - }, context_instance=DjangoContext(request)) + }, context_instance=RequestContext(request)) template_detail = staff_member_required(template_detail) #################### diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 1b98b6ce42..f3a0db71c8 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -7,7 +7,7 @@ from django.template import loader from django.db import models from django.http import Http404 from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist, PermissionDenied -from django.core.extensions import DjangoContext as Context +from django.template import RequestContext as Context from django.core.extensions import get_object_or_404, render_to_response from django.utils import dateformat from django.utils.html import escape, strip_tags diff --git a/django/contrib/admin/views/stages/add.py b/django/contrib/admin/views/stages/add.py index d019c117ca..599aa4162e 100644 --- a/django/contrib/admin/views/stages/add.py +++ b/django/contrib/admin/views/stages/add.py @@ -6,7 +6,7 @@ from django.core import formfields from django import template from django.http import Http404 from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist, PermissionDenied -from django.core.extensions import DjangoContext as Context +from django.template import RequestContext as Context from django.db import models from django.http import HttpResponse, HttpResponseRedirect from django.utils.text import capfirst, get_text_list diff --git a/django/contrib/admin/views/stages/change.py b/django/contrib/admin/views/stages/change.py index fafc1d0315..15a4a29267 100644 --- a/django/contrib/admin/views/stages/change.py +++ b/django/contrib/admin/views/stages/change.py @@ -3,7 +3,7 @@ from django.core import formfields from django import template from django.http import Http404 from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist, PermissionDenied -from django.core.extensions import DjangoContext as Context +from django.template import RequestContext as Context from django.contrib.admin.views.stages.modify import render_change_form from django.db import models from django.utils.text import capfirst, get_text_list diff --git a/django/contrib/admin/views/stages/delete.py b/django/contrib/admin/views/stages/delete.py index a5d296e21b..7537b83a50 100644 --- a/django/contrib/admin/views/stages/delete.py +++ b/django/contrib/admin/views/stages/delete.py @@ -1,7 +1,7 @@ from django.contrib.admin.views.decorators import staff_member_required from django.contrib.admin.views.main import get_model_and_app from django.core.extensions import get_object_or_404,render_to_response -from django.core.extensions import DjangoContext as Context +from django.template import RequestContext as Context from django.utils.text import capfirst from django.utils.html import escape, strip_tags from django.db import models diff --git a/django/contrib/admin/views/template.py b/django/contrib/admin/views/template.py index 9b3824f99f..9d7e2a2691 100644 --- a/django/contrib/admin/views/template.py +++ b/django/contrib/admin/views/template.py @@ -2,7 +2,8 @@ from django.contrib.admin.views.decorators import staff_member_required from django.core import formfields, validators from django import template from django.template import loader -from django.core.extensions import DjangoContext, render_to_response +from django.template import RequestContext as Context +from django.core.extensions import render_to_response from django.contrib.sites.models import Site from django.conf import settings @@ -26,7 +27,7 @@ def template_validator(request): return render_to_response('admin/template_validator', { 'title': 'Template validator', 'form': formfields.FormWrapper(manipulator, new_data, errors), - }, context_instance=DjangoContext(request)) + }, context_instance=RequestContext(request)) template_validator = staff_member_required(template_validator) class TemplateValidator(formfields.Manipulator): diff --git a/django/contrib/comments/views/comments.py b/django/contrib/comments/views/comments.py index 00d89e28b2..70043de9e1 100644 --- a/django/contrib/comments/views/comments.py +++ b/django/contrib/comments/views/comments.py @@ -2,7 +2,8 @@ from django.core import formfields, validators from django.core.mail import mail_admins, mail_managers from django.http import Http404 from django.core.exceptions import ObjectDoesNotExist -from django.core.extensions import DjangoContext, render_to_response +from django.core.extensions import render_to_response +from django.template import RequestContext from django.contrib.auth.models import SESSION_KEY from django.contrib.comments.models import Comment, FreeComment, PHOTOS_REQUIRED, PHOTOS_OPTIONAL, RATINGS_REQUIRED, RATINGS_OPTIONAL, IS_PUBLIC from django.contrib.contenttypes.models import ContentType @@ -241,7 +242,7 @@ def post_comment(request): 'ratings_required': RATINGS_REQUIRED in option_list, 'rating_range': rating_range, 'rating_choices': rating_choices, - }, context_instance=DjangoContext(request)) + }, context_instance=RequestContext(request)) elif request.POST.has_key('post'): # If the IP is banned, mail the admins, do NOT save the comment, and # serve up the "Thanks for posting" page as if the comment WAS posted. @@ -304,7 +305,7 @@ def post_free_comment(request): 'options': options, 'target': target, 'hash': security_hash, - }, context_instance=DjangoContext(request)) + }, context_instance=RequestContext(request)) elif request.POST.has_key('post'): # If the IP is banned, mail the admins, do NOT save the comment, and # serve up the "Thanks for posting" page as if the comment WAS posted. @@ -335,4 +336,4 @@ def comment_was_posted(request): obj = content_type.get_object_for_this_type(pk=object_id) except ObjectDoesNotExist: pass - return render_to_response('comments/posted', {'object': obj}, context_instance=DjangoContext(request)) + return render_to_response('comments/posted', {'object': obj}, context_instance=RequestContext(request)) diff --git a/django/contrib/comments/views/karma.py b/django/contrib/comments/views/karma.py index 530271e857..42774cc790 100644 --- a/django/contrib/comments/views/karma.py +++ b/django/contrib/comments/views/karma.py @@ -1,5 +1,6 @@ from django.http import Http404 -from django.core.extensions import DjangoContext, render_to_response +from django.core.extensions import render_to_response +from django.template import RequestContext from django.models.comments import comments, karma def vote(request, comment_id, vote): @@ -25,4 +26,4 @@ def vote(request, comment_id, vote): karma.vote(request.user.id, comment_id, rating) # Reload comment to ensure we have up to date karma count comment = comments.get_object(pk=comment_id) - return render_to_response('comments/karma_vote_accepted', {'comment': comment}, context_instance=DjangoContext(request)) + return render_to_response('comments/karma_vote_accepted', {'comment': comment}, context_instance=RequestContext(request)) diff --git a/django/contrib/comments/views/userflags.py b/django/contrib/comments/views/userflags.py index e58c3c1682..cc58fc3327 100644 --- a/django/contrib/comments/views/userflags.py +++ b/django/contrib/comments/views/userflags.py @@ -1,4 +1,5 @@ -from django.core.extensions import DjangoContext, render_to_response +from django.core.extensions import render_to_response +from django.template import RequestContext from django.http import Http404 from django.models.comments import comments, moderatordeletions, userflags from django.views.decorators.auth import login_required @@ -21,7 +22,7 @@ def flag(request, comment_id): if request.POST: userflags.flag(comment, request.user) return HttpResponseRedirect('%sdone/' % request.path) - return render_to_response('comments/flag_verify', {'comment': comment}, context_instance=DjangoContext(request)) + return render_to_response('comments/flag_verify', {'comment': comment}, context_instance=RequestContext(request)) flag = login_required(flag) def flag_done(request, comment_id): @@ -29,7 +30,7 @@ def flag_done(request, comment_id): comment = comments.get_object(pk=comment_id, site__id__exact=SITE_ID) except comments.CommentDoesNotExist: raise Http404 - return render_to_response('comments/flag_done', {'comment': comment}, context_instance=DjangoContext(request)) + return render_to_response('comments/flag_done', {'comment': comment}, context_instance=RequestContext(request)) def delete(request, comment_id): """ @@ -54,7 +55,7 @@ def delete(request, comment_id): m = moderatordeletions.ModeratorDeletion(None, request.user.id, comment.id, None) m.save() return HttpResponseRedirect('%sdone/' % request.path) - return render_to_response('comments/delete_verify', {'comment': comment}, context_instance=DjangoContext(request)) + return render_to_response('comments/delete_verify', {'comment': comment}, context_instance=RequestContext(request)) delete = login_required(delete) def delete_done(request, comment_id): @@ -62,4 +63,4 @@ def delete_done(request, comment_id): comment = comments.get_object(pk=comment_id, site__id__exact=SITE_ID) except comments.CommentDoesNotExist: raise Http404 - return render_to_response('comments/delete_done', {'comment': comment}, context_instance=DjangoContext(request)) + return render_to_response('comments/delete_done', {'comment': comment}, context_instance=RequestContext(request)) diff --git a/django/contrib/flatpages/views.py b/django/contrib/flatpages/views.py index f88b3c4c5e..58ece6aa29 100644 --- a/django/contrib/flatpages/views.py +++ b/django/contrib/flatpages/views.py @@ -1,6 +1,6 @@ from django.contrib.flatpages.models import FlatPage -from django.template import loader -from django.core.extensions import get_object_or_404, DjangoContext +from django.template import loader, RequestContext +from django.core.extensions import get_object_or_404 from django.http import HttpResponse from django.conf.settings import SITE_ID @@ -29,7 +29,7 @@ def flatpage(request, url): t = loader.select_template((f.template_name, DEFAULT_TEMPLATE)) else: t = loader.get_template(DEFAULT_TEMPLATE) - c = DjangoContext(request, { + c = RequestContext(request, { 'flatpage': f, }) return HttpResponse(t.render(c)) diff --git a/django/core/context_processors.py b/django/core/context_processors.py index 30af6bc1f3..2d2628d445 100644 --- a/django/core/context_processors.py +++ b/django/core/context_processors.py @@ -4,7 +4,7 @@ template context. Each function takes the request object as its only parameter and returns a dictionary to add to the context. These are referenced from the setting TEMPLATE_CONTEXT_PROCESSORS and used by -DjangoContext. +RequestContext. """ from django.conf.settings import DEBUG, INTERNAL_IPS, LANGUAGES, LANGUAGE_CODE diff --git a/django/core/extensions.py b/django/core/extensions.py index bd33b08db5..9572921072 100644 --- a/django/core/extensions.py +++ b/django/core/extensions.py @@ -2,33 +2,9 @@ # of MVC. In other words, these functions/classes introduce controlled coupling # for convenience's sake. -from django.core.exceptions import ImproperlyConfigured -from django.template import Context, loader -from django.conf.settings import TEMPLATE_CONTEXT_PROCESSORS +from django.template import loader from django.http import HttpResponse, Http404 -_standard_context_processors = None - -# This is a function rather than module-level procedural code because we only -# want it to execute if somebody uses DjangoContext. -def get_standard_processors(): - global _standard_context_processors - if _standard_context_processors is None: - processors = [] - for path in TEMPLATE_CONTEXT_PROCESSORS: - i = path.rfind('.') - module, attr = path[:i], path[i+1:] - try: - mod = __import__(module, '', '', [attr]) - except ImportError, e: - raise ImproperlyConfigured, 'Error importing request processor module %s: "%s"' % (module, e) - try: - func = getattr(mod, attr) - except AttributeError: - raise ImproperlyConfigured, 'Module "%s" does not define a "%s" callable request processor' % (module, attr) - processors.append(func) - _standard_context_processors = tuple(processors) - return _standard_context_processors def render_to_response(*args, **kwargs): return HttpResponse(loader.render_to_string(*args, **kwargs)) @@ -46,22 +22,6 @@ def get_list_or_404(klass, **kwargs): raise Http404 return obj_list -class DjangoContext(Context): - """ - This subclass of template.Context automatically populates itself using - the processors defined in TEMPLATE_CONTEXT_PROCESSORS. - Additional processors can be specified as a list of callables - using the "processors" keyword argument. - """ - def __init__(self, request, dict=None, processors=None): - Context.__init__(self, dict) - if processors is None: - processors = () - else: - processors = tuple(processors) - for processor in get_standard_processors() + processors: - self.update(processor(request)) - # PermWrapper and PermLookupDict proxy the permissions system into objects that # the template system can understand. diff --git a/django/template/__init__.py b/django/template/__init__.py index c6715d8b65..4fbc19a873 100644 --- a/django/template/__init__.py +++ b/django/template/__init__.py @@ -59,8 +59,9 @@ from inspect import getargspec from django.utils.functional import curry from django.conf.settings import DEFAULT_CHARSET from django.conf import settings +from django.template.context import Context, RequestContext -__all__ = ('Template','Context','compile_string') +__all__ = ('Template', 'Context', 'RequestContext', 'compile_string') TOKEN_TEXT = 0 TOKEN_VAR = 1 @@ -148,58 +149,6 @@ def compile_string(template_string, origin): parser = parser_factory(lexer.tokenize()) return parser.parse() -class Context: - "A stack container for variable context" - def __init__(self, dict=None): - dict = dict or {} - self.dicts = [dict] - - def __repr__(self): - return repr(self.dicts) - - def __iter__(self): - for d in self.dicts: - yield d - - def push(self): - self.dicts = [{}] + self.dicts - - def pop(self): - if len(self.dicts) == 1: - raise ContextPopException - del self.dicts[0] - - def __setitem__(self, key, value): - "Set a variable in the current context" - self.dicts[0][key] = value - - def __getitem__(self, key): - "Get a variable's value, starting at the current context and going upward" - for dict in self.dicts: - if dict.has_key(key): - return dict[key] - return '' - - def __delitem__(self, key): - "Delete a variable from the current context" - del self.dicts[0][key] - - def has_key(self, key): - for dict in self.dicts: - if dict.has_key(key): - return True - return False - - def get(self, key, otherwise): - for dict in self.dicts: - if dict.has_key(key): - return dict[key] - return otherwise - - def update(self, other_dict): - "Like dict.update(). Pushes an entire dictionary's keys and values onto the context." - self.dicts = [other_dict] + self.dicts - class Token: def __init__(self, token_type, contents): "The token_type must be TOKEN_TEXT, TOKEN_VAR or TOKEN_BLOCK" diff --git a/django/template/context.py b/django/template/context.py new file mode 100644 index 0000000000..1b91d8eb34 --- /dev/null +++ b/django/template/context.py @@ -0,0 +1,93 @@ +from django.conf.settings import TEMPLATE_CONTEXT_PROCESSORS +from django.core.exceptions import ImproperlyConfigured + +_standard_context_processors = None + +class Context: + "A stack container for variable context" + def __init__(self, dict=None): + dict = dict or {} + self.dicts = [dict] + + def __repr__(self): + return repr(self.dicts) + + def __iter__(self): + for d in self.dicts: + yield d + + def push(self): + self.dicts = [{}] + self.dicts + + def pop(self): + if len(self.dicts) == 1: + raise ContextPopException + del self.dicts[0] + + def __setitem__(self, key, value): + "Set a variable in the current context" + self.dicts[0][key] = value + + def __getitem__(self, key): + "Get a variable's value, starting at the current context and going upward" + for dict in self.dicts: + if dict.has_key(key): + return dict[key] + return '' + + def __delitem__(self, key): + "Delete a variable from the current context" + del self.dicts[0][key] + + def has_key(self, key): + for dict in self.dicts: + if dict.has_key(key): + return True + return False + + def get(self, key, otherwise): + for dict in self.dicts: + if dict.has_key(key): + return dict[key] + return otherwise + + def update(self, other_dict): + "Like dict.update(). Pushes an entire dictionary's keys and values onto the context." + self.dicts = [other_dict] + self.dicts + +# This is a function rather than module-level procedural code because we only +# want it to execute if somebody uses RequestContext. +def get_standard_processors(): + global _standard_context_processors + if _standard_context_processors is None: + processors = [] + for path in TEMPLATE_CONTEXT_PROCESSORS: + i = path.rfind('.') + module, attr = path[:i], path[i+1:] + try: + mod = __import__(module, '', '', [attr]) + except ImportError, e: + raise ImproperlyConfigured, 'Error importing request processor module %s: "%s"' % (module, e) + try: + func = getattr(mod, attr) + except AttributeError: + raise ImproperlyConfigured, 'Module "%s" does not define a "%s" callable request processor' % (module, attr) + processors.append(func) + _standard_context_processors = tuple(processors) + return _standard_context_processors + +class RequestContext(Context): + """ + This subclass of template.Context automatically populates itself using + the processors defined in TEMPLATE_CONTEXT_PROCESSORS. + Additional processors can be specified as a list of callables + using the "processors" keyword argument. + """ + def __init__(self, request, dict=None, processors=None): + Context.__init__(self, dict) + if processors is None: + processors = () + else: + processors = tuple(processors) + for processor in get_standard_processors() + processors: + self.update(processor(request)) diff --git a/django/views/auth/login.py b/django/views/auth/login.py index ca33b2784e..98620f9b81 100644 --- a/django/views/auth/login.py +++ b/django/views/auth/login.py @@ -1,6 +1,7 @@ from django.parts.auth.formfields import AuthenticationForm from django.core import formfields -from django.core.extensions import DjangoContext, render_to_response +from django.core.extensions import render_to_response +from django.template import RequestContext from django.contrib.auth.models import SESSION_KEY from django.contrib.sites.models import Site from django.http import HttpResponse, HttpResponseRedirect @@ -28,14 +29,14 @@ def login(request): 'form': formfields.FormWrapper(manipulator, request.POST, errors), REDIRECT_FIELD_NAME: redirect_to, 'site_name': Site.objects.get_current().name, - }, context_instance=DjangoContext(request)) + }, context_instance=RequestContext(request)) def logout(request, next_page=None): "Logs out the user and displays 'You are logged out' message." try: del request.session[SESSION_KEY] except KeyError: - return render_to_response('registration/logged_out', context_instance=DjangoContext(request)) + return render_to_response('registration/logged_out', context_instance=RequestContext(request)) else: # Redirect to this page until the session has been cleared. return HttpResponseRedirect(next_page or request.path) diff --git a/django/views/generic/create_update.py b/django/views/generic/create_update.py index c4c6084ac8..504c967276 100644 --- a/django/views/generic/create_update.py +++ b/django/views/generic/create_update.py @@ -3,7 +3,7 @@ from django.core.xheaders import populate_xheaders from django.template import loader from django.core import formfields, meta from django.views.auth.login import redirect_to_login -from django.core.extensions import DjangoContext +from django.template import RequestContext from django.core.paginator import ObjectPaginator, InvalidPage from django.http import Http404, HttpResponse, HttpResponseRedirect from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured @@ -60,7 +60,7 @@ def create_object(request, app_label, module_name, template_name=None, if not template_name: template_name = "%s/%s_form" % (app_label, module_name) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'form': form, }, context_processors) for key, value in extra_context.items(): @@ -131,7 +131,7 @@ def update_object(request, app_label, module_name, object_id=None, slug=None, if not template_name: template_name = "%s/%s_form" % (app_label, module_name) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'form': form, 'object': object, }, context_processors) @@ -188,7 +188,7 @@ def delete_object(request, app_label, module_name, post_delete_redirect, if not template_name: template_name = "%s/%s_confirm_delete" % (app_label, module_name) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'object': object, }, context_processors) for key, value in extra_context.items(): diff --git a/django/views/generic/date_based.py b/django/views/generic/date_based.py index 86857370bd..e4b1ee4e5f 100644 --- a/django/views/generic/date_based.py +++ b/django/views/generic/date_based.py @@ -1,6 +1,5 @@ -from django.template import loader +from django.template import loader, RequestContext from django.core.exceptions import ObjectDoesNotExist -from django.core.extensions import DjangoContext from django.core.xheaders import populate_xheaders from django.models import get_module from django.http import Http404, HttpResponse @@ -38,7 +37,7 @@ def archive_index(request, app_label, module_name, date_field, num_latest=15, if not template_name: template_name = "%s/%s_archive" % (app_label, module_name) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'date_list' : date_list, 'latest' : latest, }, context_processors) @@ -75,7 +74,7 @@ def archive_year(request, year, app_label, module_name, date_field, if not template_name: template_name = "%s/%s_archive_year" % (app_label, module_name) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'date_list': date_list, 'year': year, }, context_processors) @@ -123,7 +122,7 @@ def archive_month(request, year, month, app_label, module_name, date_field, if not template_name: template_name = "%s/%s_archive_month" % (app_label, module_name) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'object_list': object_list, 'month': date, }, context_processors) @@ -172,7 +171,7 @@ def archive_day(request, year, month, day, app_label, module_name, date_field, if not template_name: template_name = "%s/%s_archive_day" % (app_label, module_name) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'object_list': object_list, 'day': date, 'previous_day': date - datetime.timedelta(days=1), @@ -241,7 +240,7 @@ def object_detail(request, year, month, day, app_label, module_name, date_field, t = template_loader.select_template(template_name_list) else: t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'object': object, }, context_processors) for key, value in extra_context.items(): diff --git a/django/views/generic/list_detail.py b/django/views/generic/list_detail.py index 3d4fc32f14..d557276feb 100644 --- a/django/views/generic/list_detail.py +++ b/django/views/generic/list_detail.py @@ -1,8 +1,7 @@ from django import models -from django.template import loader +from django.template import loader, RequestContext from django.http import Http404, HttpResponse from django.core.xheaders import populate_xheaders -from django.core.extensions import DjangoContext from django.core.paginator import ObjectPaginator, InvalidPage from django.core.exceptions import ObjectDoesNotExist @@ -48,7 +47,7 @@ def object_list(request, app_label, module_name, paginate_by=None, allow_empty=F else: raise Http404 page = int(page) - c = DjangoContext(request, { + c = RequestContext(request, { 'object_list': object_list, 'is_paginated': paginator.pages > 1, 'results_per_page': paginate_by, @@ -62,7 +61,7 @@ def object_list(request, app_label, module_name, paginate_by=None, allow_empty=F }, context_processors) else: object_list = mod.get_list(**lookup_kwargs) - c = DjangoContext(request, { + c = RequestContext(request, { 'object_list': object_list, 'is_paginated': False }, context_processors) @@ -110,7 +109,7 @@ def object_detail(request, app_label, module_name, object_id=None, slug=None, t = template_loader.select_template(template_name_list) else: t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'object': object, }, context_processors) for key, value in extra_context.items(): diff --git a/django/views/generic/simple.py b/django/views/generic/simple.py index b9e49db1ac..bb64c5c968 100644 --- a/django/views/generic/simple.py +++ b/django/views/generic/simple.py @@ -1,4 +1,5 @@ -from django.core.extensions import DjangoContext, render_to_response +from django.core.extensions import render_to_response +from django.template import RequestContext from django.http import HttpResponse, HttpResponsePermanentRedirect, HttpResponseGone def direct_to_template(request, template, **kwargs): @@ -6,7 +7,7 @@ def direct_to_template(request, template, **kwargs): Render a given template with any extra URL parameters in the context as ``{{ params }}``. """ - return render_to_response(template, {'params' : kwargs}, context_instance=DjangoContext(request)) + return render_to_response(template, {'params' : kwargs}, context_instance=RequestContext(request)) def redirect_to(request, url, **kwargs): """ diff --git a/django/views/registration/passwords.py b/django/views/registration/passwords.py index ebdc06d1a9..b7dce227a1 100644 --- a/django/views/registration/passwords.py +++ b/django/views/registration/passwords.py @@ -1,6 +1,6 @@ from django.core import formfields, validators -from django.core.extensions import DjangoContext, render_to_response -from django.template import Context, loader +from django.core.extensions import render_to_response +from django.template import Context, RequestContext, loader from django.models.auth import User from django.models.core import Site from django.views.decorators.auth import login_required @@ -78,10 +78,10 @@ def password_reset(request, is_admin_site=False): form.save() return HttpResponseRedirect('%sdone/' % request.path) return render_to_response('registration/password_reset_form', {'form': formfields.FormWrapper(form, new_data, errors)}, - context_instance=DjangoContext(request)) + context_instance=RequestContext(request)) def password_reset_done(request): - return render_to_response('registration/password_reset_done', context_instance=DjangoContext(request)) + return render_to_response('registration/password_reset_done', context_instance=RequestContext(request)) def password_change(request): new_data, errors = {}, {} @@ -93,8 +93,8 @@ def password_change(request): form.save(new_data) return HttpResponseRedirect('%sdone/' % request.path) return render_to_response('registration/password_change_form', {'form': formfields.FormWrapper(form, new_data, errors)}, - context_instance=DjangoContext(request)) + context_instance=RequestContext(request)) password_change = login_required(password_change) def password_change_done(request): - return render_to_response('registration/password_change_done', context_instance=DjangoContext(request)) + return render_to_response('registration/password_change_done', context_instance=RequestContext(request))