mirror of
				https://github.com/django/django.git
				synced 2025-11-04 05:35:37 +00:00 
			
		
		
		
	Deprecated current_app in TemplateResponse and render(_to_response).
This commit is contained in:
		
							parent
							
								
									e53495ba33
								
							
						
					
					
						commit
						cf1f36bb6e
					
				
					 18 changed files with 197 additions and 56 deletions
				
			
		| 
						 | 
					@ -76,11 +76,13 @@ def delete_selected(modeladmin, request, queryset):
 | 
				
			||||||
        action_checkbox_name=helpers.ACTION_CHECKBOX_NAME,
 | 
					        action_checkbox_name=helpers.ACTION_CHECKBOX_NAME,
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    request.current_app = modeladmin.admin_site.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Display the confirmation page
 | 
					    # Display the confirmation page
 | 
				
			||||||
    return TemplateResponse(request, modeladmin.delete_selected_confirmation_template or [
 | 
					    return TemplateResponse(request, modeladmin.delete_selected_confirmation_template or [
 | 
				
			||||||
        "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.model_name),
 | 
					        "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.model_name),
 | 
				
			||||||
        "admin/%s/delete_selected_confirmation.html" % app_label,
 | 
					        "admin/%s/delete_selected_confirmation.html" % app_label,
 | 
				
			||||||
        "admin/delete_selected_confirmation.html"
 | 
					        "admin/delete_selected_confirmation.html"
 | 
				
			||||||
    ], context, current_app=modeladmin.admin_site.name)
 | 
					    ], context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
delete_selected.short_description = ugettext_lazy("Delete selected %(verbose_name_plural)s")
 | 
					delete_selected.short_description = ugettext_lazy("Delete selected %(verbose_name_plural)s")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1120,11 +1120,13 @@ class ModelAdmin(BaseModelAdmin):
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            form_template = self.change_form_template
 | 
					            form_template = self.change_form_template
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        request.current_app = self.admin_site.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return TemplateResponse(request, form_template or [
 | 
					        return TemplateResponse(request, form_template or [
 | 
				
			||||||
            "admin/%s/%s/change_form.html" % (app_label, opts.model_name),
 | 
					            "admin/%s/%s/change_form.html" % (app_label, opts.model_name),
 | 
				
			||||||
            "admin/%s/change_form.html" % app_label,
 | 
					            "admin/%s/change_form.html" % app_label,
 | 
				
			||||||
            "admin/change_form.html"
 | 
					            "admin/change_form.html"
 | 
				
			||||||
        ], context, current_app=self.admin_site.name)
 | 
					        ], context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def response_add(self, request, obj, post_url_continue=None):
 | 
					    def response_add(self, request, obj, post_url_continue=None):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
| 
						 | 
					@ -1349,12 +1351,14 @@ class ModelAdmin(BaseModelAdmin):
 | 
				
			||||||
        opts = self.model._meta
 | 
					        opts = self.model._meta
 | 
				
			||||||
        app_label = opts.app_label
 | 
					        app_label = opts.app_label
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        request.current_app = self.admin_site.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return TemplateResponse(request,
 | 
					        return TemplateResponse(request,
 | 
				
			||||||
            self.delete_confirmation_template or [
 | 
					            self.delete_confirmation_template or [
 | 
				
			||||||
                "admin/{}/{}/delete_confirmation.html".format(app_label, opts.model_name),
 | 
					                "admin/{}/{}/delete_confirmation.html".format(app_label, opts.model_name),
 | 
				
			||||||
                "admin/{}/delete_confirmation.html".format(app_label),
 | 
					                "admin/{}/delete_confirmation.html".format(app_label),
 | 
				
			||||||
                "admin/delete_confirmation.html"
 | 
					                "admin/delete_confirmation.html"
 | 
				
			||||||
            ], context, current_app=self.admin_site.name)
 | 
					            ], context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_inline_formsets(self, request, formsets, inline_instances,
 | 
					    def get_inline_formsets(self, request, formsets, inline_instances,
 | 
				
			||||||
                            obj=None):
 | 
					                            obj=None):
 | 
				
			||||||
| 
						 | 
					@ -1632,11 +1636,13 @@ class ModelAdmin(BaseModelAdmin):
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        context.update(extra_context or {})
 | 
					        context.update(extra_context or {})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        request.current_app = self.admin_site.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return TemplateResponse(request, self.change_list_template or [
 | 
					        return TemplateResponse(request, self.change_list_template or [
 | 
				
			||||||
            'admin/%s/%s/change_list.html' % (app_label, opts.model_name),
 | 
					            'admin/%s/%s/change_list.html' % (app_label, opts.model_name),
 | 
				
			||||||
            'admin/%s/change_list.html' % app_label,
 | 
					            'admin/%s/change_list.html' % app_label,
 | 
				
			||||||
            'admin/change_list.html'
 | 
					            'admin/change_list.html'
 | 
				
			||||||
        ], context, current_app=self.admin_site.name)
 | 
					        ], context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @csrf_protect_m
 | 
					    @csrf_protect_m
 | 
				
			||||||
    @transaction.atomic
 | 
					    @transaction.atomic
 | 
				
			||||||
| 
						 | 
					@ -1723,11 +1729,14 @@ class ModelAdmin(BaseModelAdmin):
 | 
				
			||||||
            preserved_filters=self.get_preserved_filters(request),
 | 
					            preserved_filters=self.get_preserved_filters(request),
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        context.update(extra_context or {})
 | 
					        context.update(extra_context or {})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        request.current_app = self.admin_site.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return TemplateResponse(request, self.object_history_template or [
 | 
					        return TemplateResponse(request, self.object_history_template or [
 | 
				
			||||||
            "admin/%s/%s/object_history.html" % (app_label, opts.model_name),
 | 
					            "admin/%s/%s/object_history.html" % (app_label, opts.model_name),
 | 
				
			||||||
            "admin/%s/object_history.html" % app_label,
 | 
					            "admin/%s/object_history.html" % app_label,
 | 
				
			||||||
            "admin/object_history.html"
 | 
					            "admin/object_history.html"
 | 
				
			||||||
        ], context, current_app=self.admin_site.name)
 | 
					        ], context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _create_formsets(self, request, obj, change):
 | 
					    def _create_formsets(self, request, obj, change):
 | 
				
			||||||
        "Helper function to generate formsets for add/change_view."
 | 
					        "Helper function to generate formsets for add/change_view."
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -436,9 +436,11 @@ class AdminSite(object):
 | 
				
			||||||
            app_list=app_list,
 | 
					            app_list=app_list,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        context.update(extra_context or {})
 | 
					        context.update(extra_context or {})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        request.current_app = self.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return TemplateResponse(request, self.index_template or
 | 
					        return TemplateResponse(request, self.index_template or
 | 
				
			||||||
                                'admin/index.html', context,
 | 
					                                'admin/index.html', context)
 | 
				
			||||||
                                current_app=self.name)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def app_index(self, request, app_label, extra_context=None):
 | 
					    def app_index(self, request, app_label, extra_context=None):
 | 
				
			||||||
        app_name = apps.get_app_config(app_label).verbose_name
 | 
					        app_name = apps.get_app_config(app_label).verbose_name
 | 
				
			||||||
| 
						 | 
					@ -494,10 +496,12 @@ class AdminSite(object):
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        context.update(extra_context or {})
 | 
					        context.update(extra_context or {})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        request.current_app = self.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return TemplateResponse(request, self.app_index_template or [
 | 
					        return TemplateResponse(request, self.app_index_template or [
 | 
				
			||||||
            'admin/%s/app_index.html' % app_label,
 | 
					            'admin/%s/app_index.html' % app_label,
 | 
				
			||||||
            'admin/app_index.html'
 | 
					            'admin/app_index.html'
 | 
				
			||||||
        ], context, current_app=self.name)
 | 
					        ], context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This global object represents the default admin site, for the common case.
 | 
					# This global object represents the default admin site, for the common case.
 | 
				
			||||||
# You can instantiate AdminSite in your own code to create a custom admin site.
 | 
					# You can instantiate AdminSite in your own code to create a custom admin site.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,10 +158,13 @@ class UserAdmin(admin.ModelAdmin):
 | 
				
			||||||
            'show_save': True,
 | 
					            'show_save': True,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        context.update(admin.site.each_context())
 | 
					        context.update(admin.site.each_context())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        request.current_app = self.admin_site.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return TemplateResponse(request,
 | 
					        return TemplateResponse(request,
 | 
				
			||||||
            self.change_user_password_template or
 | 
					            self.change_user_password_template or
 | 
				
			||||||
            'admin/auth/user/change_password.html',
 | 
					            'admin/auth/user/change_password.html',
 | 
				
			||||||
            context, current_app=self.admin_site.name)
 | 
					            context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def response_add(self, request, obj, post_url_continue=None):
 | 
					    def response_add(self, request, obj, post_url_continue=None):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,8 +60,11 @@ def login(request, template_name='registration/login.html',
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if extra_context is not None:
 | 
					    if extra_context is not None:
 | 
				
			||||||
        context.update(extra_context)
 | 
					        context.update(extra_context)
 | 
				
			||||||
    return TemplateResponse(request, template_name, context,
 | 
					
 | 
				
			||||||
                            current_app=current_app)
 | 
					    if current_app is not None:
 | 
				
			||||||
 | 
					        request.current_app = current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return TemplateResponse(request, template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def logout(request, next_page=None,
 | 
					def logout(request, next_page=None,
 | 
				
			||||||
| 
						 | 
					@ -96,8 +99,11 @@ def logout(request, next_page=None,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if extra_context is not None:
 | 
					    if extra_context is not None:
 | 
				
			||||||
        context.update(extra_context)
 | 
					        context.update(extra_context)
 | 
				
			||||||
    return TemplateResponse(request, template_name, context,
 | 
					
 | 
				
			||||||
        current_app=current_app)
 | 
					    if current_app is not None:
 | 
				
			||||||
 | 
					        request.current_app = current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return TemplateResponse(request, template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def logout_then_login(request, login_url=None, current_app=None, extra_context=None):
 | 
					def logout_then_login(request, login_url=None, current_app=None, extra_context=None):
 | 
				
			||||||
| 
						 | 
					@ -179,8 +185,11 @@ def password_reset(request, is_admin_site=False,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if extra_context is not None:
 | 
					    if extra_context is not None:
 | 
				
			||||||
        context.update(extra_context)
 | 
					        context.update(extra_context)
 | 
				
			||||||
    return TemplateResponse(request, template_name, context,
 | 
					
 | 
				
			||||||
                            current_app=current_app)
 | 
					    if current_app is not None:
 | 
				
			||||||
 | 
					        request.current_app = current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return TemplateResponse(request, template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def password_reset_done(request,
 | 
					def password_reset_done(request,
 | 
				
			||||||
| 
						 | 
					@ -191,8 +200,11 @@ def password_reset_done(request,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if extra_context is not None:
 | 
					    if extra_context is not None:
 | 
				
			||||||
        context.update(extra_context)
 | 
					        context.update(extra_context)
 | 
				
			||||||
    return TemplateResponse(request, template_name, context,
 | 
					
 | 
				
			||||||
                            current_app=current_app)
 | 
					    if current_app is not None:
 | 
				
			||||||
 | 
					        request.current_app = current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return TemplateResponse(request, template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Doesn't need csrf_protect since no-one can guess the URL
 | 
					# Doesn't need csrf_protect since no-one can guess the URL
 | 
				
			||||||
| 
						 | 
					@ -241,8 +253,11 @@ def password_reset_confirm(request, uidb64=None, token=None,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if extra_context is not None:
 | 
					    if extra_context is not None:
 | 
				
			||||||
        context.update(extra_context)
 | 
					        context.update(extra_context)
 | 
				
			||||||
    return TemplateResponse(request, template_name, context,
 | 
					
 | 
				
			||||||
                            current_app=current_app)
 | 
					    if current_app is not None:
 | 
				
			||||||
 | 
					        request.current_app = current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return TemplateResponse(request, template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def password_reset_complete(request,
 | 
					def password_reset_complete(request,
 | 
				
			||||||
| 
						 | 
					@ -254,8 +269,11 @@ def password_reset_complete(request,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if extra_context is not None:
 | 
					    if extra_context is not None:
 | 
				
			||||||
        context.update(extra_context)
 | 
					        context.update(extra_context)
 | 
				
			||||||
    return TemplateResponse(request, template_name, context,
 | 
					
 | 
				
			||||||
                            current_app=current_app)
 | 
					    if current_app is not None:
 | 
				
			||||||
 | 
					        request.current_app = current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return TemplateResponse(request, template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@sensitive_post_parameters()
 | 
					@sensitive_post_parameters()
 | 
				
			||||||
| 
						 | 
					@ -288,8 +306,11 @@ def password_change(request,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if extra_context is not None:
 | 
					    if extra_context is not None:
 | 
				
			||||||
        context.update(extra_context)
 | 
					        context.update(extra_context)
 | 
				
			||||||
    return TemplateResponse(request, template_name, context,
 | 
					
 | 
				
			||||||
                            current_app=current_app)
 | 
					    if current_app is not None:
 | 
				
			||||||
 | 
					        request.current_app = current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return TemplateResponse(request, template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
| 
						 | 
					@ -301,5 +322,8 @@ def password_change_done(request,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if extra_context is not None:
 | 
					    if extra_context is not None:
 | 
				
			||||||
        context.update(extra_context)
 | 
					        context.update(extra_context)
 | 
				
			||||||
    return TemplateResponse(request, template_name, context,
 | 
					
 | 
				
			||||||
                            current_app=current_app)
 | 
					    if current_app is not None:
 | 
				
			||||||
 | 
					        request.current_app = current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return TemplateResponse(request, template_name, context)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,9 @@ This module collects helper functions and classes that "span" multiple levels
 | 
				
			||||||
of MVC. In other words, these functions/classes introduce controlled coupling
 | 
					of MVC. In other words, these functions/classes introduce controlled coupling
 | 
				
			||||||
for convenience's sake.
 | 
					for convenience's sake.
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import warnings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.template import loader, RequestContext
 | 
					from django.template import loader, RequestContext
 | 
				
			||||||
from django.template.context import _current_app_undefined
 | 
					from django.template.context import _current_app_undefined
 | 
				
			||||||
from django.template.engine import (
 | 
					from django.template.engine import (
 | 
				
			||||||
| 
						 | 
					@ -14,6 +17,7 @@ from django.db.models.manager import Manager
 | 
				
			||||||
from django.db.models.query import QuerySet
 | 
					from django.db.models.query import QuerySet
 | 
				
			||||||
from django.core import urlresolvers
 | 
					from django.core import urlresolvers
 | 
				
			||||||
from django.utils import six
 | 
					from django.utils import six
 | 
				
			||||||
 | 
					from django.utils.deprecation import RemovedInDjango20Warning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def render_to_response(template_name, context=None,
 | 
					def render_to_response(template_name, context=None,
 | 
				
			||||||
| 
						 | 
					@ -61,7 +65,16 @@ def render(request, template_name, context=None,
 | 
				
			||||||
                raise ValueError('If you provide a context_instance you must '
 | 
					                raise ValueError('If you provide a context_instance you must '
 | 
				
			||||||
                                 'set its current_app before calling render()')
 | 
					                                 'set its current_app before calling render()')
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            context_instance = RequestContext(request, current_app=current_app)
 | 
					            context_instance = RequestContext(request)
 | 
				
			||||||
 | 
					            if current_app is not _current_app_undefined:
 | 
				
			||||||
 | 
					                warnings.warn(
 | 
				
			||||||
 | 
					                    "The current_app argument of render is deprecated. "
 | 
				
			||||||
 | 
					                    "Set the current_app attribute of request instead.",
 | 
				
			||||||
 | 
					                    RemovedInDjango20Warning, stacklevel=2)
 | 
				
			||||||
 | 
					                request.current_app = current_app
 | 
				
			||||||
 | 
					                # Directly set the private attribute to avoid triggering the
 | 
				
			||||||
 | 
					                # warning in RequestContext.__init__.
 | 
				
			||||||
 | 
					                context_instance._current_app = current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        content = loader.render_to_string(
 | 
					        content = loader.render_to_string(
 | 
				
			||||||
            template_name, context, context_instance, dirs, dictionary)
 | 
					            template_name, context, context_instance, dirs, dictionary)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,7 @@
 | 
				
			||||||
from copy import copy
 | 
					from copy import copy
 | 
				
			||||||
 | 
					import warnings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.utils.deprecation import RemovedInDjango20Warning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Hard-coded processor for easier use of CSRF protection.
 | 
					# Hard-coded processor for easier use of CSRF protection.
 | 
				
			||||||
| 
						 | 
					@ -122,16 +125,23 @@ class Context(BaseContext):
 | 
				
			||||||
    def __init__(self, dict_=None, autoescape=True,
 | 
					    def __init__(self, dict_=None, autoescape=True,
 | 
				
			||||||
            current_app=_current_app_undefined,
 | 
					            current_app=_current_app_undefined,
 | 
				
			||||||
            use_l10n=None, use_tz=None, engine=None):
 | 
					            use_l10n=None, use_tz=None, engine=None):
 | 
				
			||||||
        if current_app is _current_app_undefined:
 | 
					        if current_app is not _current_app_undefined:
 | 
				
			||||||
            current_app = None
 | 
					            warnings.warn(
 | 
				
			||||||
 | 
					                "The current_app argument of Context is deprecated. Use "
 | 
				
			||||||
 | 
					                "RequestContext and set the current_app attribute of its "
 | 
				
			||||||
 | 
					                "request instead.", RemovedInDjango20Warning, stacklevel=2)
 | 
				
			||||||
        self.autoescape = autoescape
 | 
					        self.autoescape = autoescape
 | 
				
			||||||
        self.current_app = current_app
 | 
					        self._current_app = current_app
 | 
				
			||||||
        self.use_l10n = use_l10n
 | 
					        self.use_l10n = use_l10n
 | 
				
			||||||
        self.use_tz = use_tz
 | 
					        self.use_tz = use_tz
 | 
				
			||||||
        self.engine = engine
 | 
					        self.engine = engine
 | 
				
			||||||
        self.render_context = RenderContext()
 | 
					        self.render_context = RenderContext()
 | 
				
			||||||
        super(Context, self).__init__(dict_)
 | 
					        super(Context, self).__init__(dict_)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def current_app(self):
 | 
				
			||||||
 | 
					        return None if self._current_app is _current_app_undefined else self._current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __copy__(self):
 | 
					    def __copy__(self):
 | 
				
			||||||
        duplicate = super(Context, self).__copy__()
 | 
					        duplicate = super(Context, self).__copy__()
 | 
				
			||||||
        duplicate.render_context = copy(self.render_context)
 | 
					        duplicate.render_context = copy(self.render_context)
 | 
				
			||||||
| 
						 | 
					@ -184,9 +194,17 @@ class RequestContext(Context):
 | 
				
			||||||
    def __init__(self, request, dict_=None, processors=None,
 | 
					    def __init__(self, request, dict_=None, processors=None,
 | 
				
			||||||
            current_app=_current_app_undefined,
 | 
					            current_app=_current_app_undefined,
 | 
				
			||||||
            use_l10n=None, use_tz=None, engine=None):
 | 
					            use_l10n=None, use_tz=None, engine=None):
 | 
				
			||||||
        Context.__init__(self, dict_, current_app=current_app,
 | 
					        # current_app isn't passed here to avoid triggering the deprecation
 | 
				
			||||||
                use_l10n=use_l10n, use_tz=use_tz, engine=engine)
 | 
					        # warning in Context.__init__.
 | 
				
			||||||
        self._request = request
 | 
					        super(RequestContext, self).__init__(
 | 
				
			||||||
 | 
					            dict_, use_l10n=use_l10n, use_tz=use_tz, engine=engine)
 | 
				
			||||||
 | 
					        if current_app is not _current_app_undefined:
 | 
				
			||||||
 | 
					            warnings.warn(
 | 
				
			||||||
 | 
					                "The current_app argument of RequestContext is deprecated. "
 | 
				
			||||||
 | 
					                "Set the current_app attribute of its request instead.",
 | 
				
			||||||
 | 
					                RemovedInDjango20Warning, stacklevel=2)
 | 
				
			||||||
 | 
					        self._current_app = current_app
 | 
				
			||||||
 | 
					        self.request = request
 | 
				
			||||||
        self._processors = () if processors is None else tuple(processors)
 | 
					        self._processors = () if processors is None else tuple(processors)
 | 
				
			||||||
        self._processors_index = len(self.dicts)
 | 
					        self._processors_index = len(self.dicts)
 | 
				
			||||||
        self.update({})         # placeholder for context processors output
 | 
					        self.update({})         # placeholder for context processors output
 | 
				
			||||||
| 
						 | 
					@ -207,7 +225,7 @@ class RequestContext(Context):
 | 
				
			||||||
                # Set context processors for this engine.
 | 
					                # Set context processors for this engine.
 | 
				
			||||||
                updates = {}
 | 
					                updates = {}
 | 
				
			||||||
                for processor in engine.template_context_processors + self._processors:
 | 
					                for processor in engine.template_context_processors + self._processors:
 | 
				
			||||||
                    updates.update(processor(self._request))
 | 
					                    updates.update(processor(self.request))
 | 
				
			||||||
                self.dicts[self._processors_index] = updates
 | 
					                self.dicts[self._processors_index] = updates
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def new(self, values=None):
 | 
					    def new(self, values=None):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -476,13 +476,20 @@ class URLNode(Node):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        view_name = self.view_name.resolve(context)
 | 
					        view_name = self.view_name.resolve(context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            current_app = context.request.current_app
 | 
				
			||||||
 | 
					        except AttributeError:
 | 
				
			||||||
 | 
					            # Change the fallback value to None when the deprecation path for
 | 
				
			||||||
 | 
					            # Context.current_app completes in Django 2.0.
 | 
				
			||||||
 | 
					            current_app = context.current_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Try to look up the URL twice: once given the view name, and again
 | 
					        # Try to look up the URL twice: once given the view name, and again
 | 
				
			||||||
        # relative to what we guess is the "main" app. If they both fail,
 | 
					        # relative to what we guess is the "main" app. If they both fail,
 | 
				
			||||||
        # re-raise the NoReverseMatch unless we're using the
 | 
					        # re-raise the NoReverseMatch unless we're using the
 | 
				
			||||||
        # {% url ... as var %} construct in which case return nothing.
 | 
					        # {% url ... as var %} construct in which case return nothing.
 | 
				
			||||||
        url = ''
 | 
					        url = ''
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            url = reverse(view_name, args=args, kwargs=kwargs, current_app=context.current_app)
 | 
					            url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
 | 
				
			||||||
        except NoReverseMatch:
 | 
					        except NoReverseMatch:
 | 
				
			||||||
            exc_info = sys.exc_info()
 | 
					            exc_info = sys.exc_info()
 | 
				
			||||||
            if settings.SETTINGS_MODULE:
 | 
					            if settings.SETTINGS_MODULE:
 | 
				
			||||||
| 
						 | 
					@ -490,7 +497,7 @@ class URLNode(Node):
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    url = reverse(project_name + '.' + view_name,
 | 
					                    url = reverse(project_name + '.' + view_name,
 | 
				
			||||||
                              args=args, kwargs=kwargs,
 | 
					                              args=args, kwargs=kwargs,
 | 
				
			||||||
                              current_app=context.current_app)
 | 
					                              current_app=current_app)
 | 
				
			||||||
                except NoReverseMatch:
 | 
					                except NoReverseMatch:
 | 
				
			||||||
                    if self.asvar is None:
 | 
					                    if self.asvar is None:
 | 
				
			||||||
                        # Re-raise the original exception, not the one with
 | 
					                        # Re-raise the original exception, not the one with
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,10 @@
 | 
				
			||||||
 | 
					import warnings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.http import HttpResponse
 | 
					from django.http import HttpResponse
 | 
				
			||||||
from django.template import loader, Context, RequestContext
 | 
					from django.template import loader, Context, RequestContext
 | 
				
			||||||
 | 
					from django.template.context import _current_app_undefined
 | 
				
			||||||
from django.utils import six
 | 
					from django.utils import six
 | 
				
			||||||
 | 
					from django.utils.deprecation import RemovedInDjango20Warning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ContentNotRenderedError(Exception):
 | 
					class ContentNotRenderedError(Exception):
 | 
				
			||||||
| 
						 | 
					@ -137,14 +141,19 @@ class TemplateResponse(SimpleTemplateResponse):
 | 
				
			||||||
    rendering_attrs = SimpleTemplateResponse.rendering_attrs + ['_request', '_current_app']
 | 
					    rendering_attrs = SimpleTemplateResponse.rendering_attrs + ['_request', '_current_app']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, request, template, context=None, content_type=None,
 | 
					    def __init__(self, request, template, context=None, content_type=None,
 | 
				
			||||||
            status=None, current_app=None, charset=None):
 | 
					            status=None, current_app=_current_app_undefined, charset=None):
 | 
				
			||||||
        # self.request gets over-written by django.test.client.Client - and
 | 
					        # self.request gets over-written by django.test.client.Client - and
 | 
				
			||||||
        # unlike context_data and template_name the _request should not
 | 
					        # unlike context_data and template_name the _request should not
 | 
				
			||||||
        # be considered part of the public API.
 | 
					        # be considered part of the public API.
 | 
				
			||||||
        self._request = request
 | 
					        self._request = request
 | 
				
			||||||
        # As a convenience we'll allow callers to provide current_app without
 | 
					        # As a convenience we'll allow callers to provide current_app without
 | 
				
			||||||
        # having to avoid needing to create the RequestContext directly
 | 
					        # having to avoid needing to create the RequestContext directly
 | 
				
			||||||
        self._current_app = current_app
 | 
					        if current_app is not _current_app_undefined:
 | 
				
			||||||
 | 
					            warnings.warn(
 | 
				
			||||||
 | 
					                "The current_app argument of TemplateResponse is deprecated. "
 | 
				
			||||||
 | 
					                "Set the current_app attribute of its request instead.",
 | 
				
			||||||
 | 
					                RemovedInDjango20Warning, stacklevel=2)
 | 
				
			||||||
 | 
					            request.current_app = current_app
 | 
				
			||||||
        super(TemplateResponse, self).__init__(
 | 
					        super(TemplateResponse, self).__init__(
 | 
				
			||||||
            template, context, content_type, status, charset)
 | 
					            template, context, content_type, status, charset)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -154,7 +163,7 @@ class TemplateResponse(SimpleTemplateResponse):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        if isinstance(context, Context):
 | 
					        if isinstance(context, Context):
 | 
				
			||||||
            return context
 | 
					            return context
 | 
				
			||||||
        context_instance = RequestContext(self._request, current_app=self._current_app)
 | 
					        context_instance = RequestContext(self._request)
 | 
				
			||||||
        if context:
 | 
					        if context:
 | 
				
			||||||
            context_instance.push(context)
 | 
					            context_instance.push(context)
 | 
				
			||||||
        return context_instance
 | 
					        return context_instance
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -90,6 +90,14 @@ details on these changes.
 | 
				
			||||||
* The backwards compatibility alias ``django.template.loader.BaseLoader`` will
 | 
					* The backwards compatibility alias ``django.template.loader.BaseLoader`` will
 | 
				
			||||||
  be removed.
 | 
					  be removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* The ``current_app`` parameter for the following function and classes will be
 | 
				
			||||||
 | 
					  removed:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * ``django.shortcuts.render()``
 | 
				
			||||||
 | 
					  * ``django.template.Context()``
 | 
				
			||||||
 | 
					  * ``django.template.RequestContext()``
 | 
				
			||||||
 | 
					  * ``django.template.response.TemplateResponse()``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* The ``dictionary`` and ``context_instance`` parameters for the following
 | 
					* The ``dictionary`` and ``context_instance`` parameters for the following
 | 
				
			||||||
  functions will be removed:
 | 
					  functions will be removed:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2628,11 +2628,16 @@ a pattern for your new view.
 | 
				
			||||||
.. note::
 | 
					.. note::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Any view you render that uses the admin templates, or extends the base
 | 
					    Any view you render that uses the admin templates, or extends the base
 | 
				
			||||||
    admin template, should provide the ``current_app`` argument to
 | 
					    admin template, should set ``request.current_app`` before rendering the
 | 
				
			||||||
    :class:`~django.template.RequestContext` or
 | 
					    template. It should be set to either ``self.name`` if your view is on an
 | 
				
			||||||
    :class:`~django.template.Context` when rendering the template.  It should
 | 
					    ``AdminSite`` or ``self.admin_site.name`` if your view is on a
 | 
				
			||||||
    be set to either ``self.name`` if your view is on an ``AdminSite`` or
 | 
					    ``ModelAdmin``.
 | 
				
			||||||
    ``self.admin_site.name`` if your view is on a ``ModelAdmin``.
 | 
					
 | 
				
			||||||
 | 
					    .. versionchanged:: 1.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       In previous versions of Django, you had to provide the ``current_app``
 | 
				
			||||||
 | 
					       argument to :class:`~django.template.RequestContext` or
 | 
				
			||||||
 | 
					       :class:`~django.template.Context` when rendering the template.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. _auth_password_reset:
 | 
					.. _auth_password_reset:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -182,6 +182,11 @@ Methods
 | 
				
			||||||
        :ref:`namespaced URL resolution strategy <topics-http-reversing-url-namespaces>`
 | 
					        :ref:`namespaced URL resolution strategy <topics-http-reversing-url-namespaces>`
 | 
				
			||||||
        for more information.
 | 
					        for more information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .. deprecated:: 1.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					           The ``current_app`` argument is deprecated. Instead you should set
 | 
				
			||||||
 | 
					           ``request.current_app``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ``charset``
 | 
					    ``charset``
 | 
				
			||||||
        The charset in which the response will be encoded. If not given it will
 | 
					        The charset in which the response will be encoded. If not given it will
 | 
				
			||||||
        be extracted from ``content_type``, and if that is unsuccessful, the
 | 
					        be extracted from ``content_type``, and if that is unsuccessful, the
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1204,6 +1204,21 @@ to construct the "view on site" URL. This URL is now accessible using the
 | 
				
			||||||
sure to provide a default value for the ``form_class`` argument since it's
 | 
					sure to provide a default value for the ``form_class`` argument since it's
 | 
				
			||||||
now optional.
 | 
					now optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					``current_app`` argument of template-related APIs
 | 
				
			||||||
 | 
					~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following functions and classes will no longer accept a ``current_app``
 | 
				
			||||||
 | 
					parameter to set an URL namespace in Django 2.0:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* ``django.shortcuts.render()``
 | 
				
			||||||
 | 
					* ``django.template.Context()``
 | 
				
			||||||
 | 
					* ``django.template.RequestContext()``
 | 
				
			||||||
 | 
					* ``django.template.response.TemplateResponse()``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Set ``request.current_app`` instead, where ``request`` is the first argument
 | 
				
			||||||
 | 
					to these functions or classes. If you're using a plain ``Context``, use a
 | 
				
			||||||
 | 
					``RequestContext`` instead.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``dictionary`` and ``context_instance`` arguments of rendering functions
 | 
					``dictionary`` and ``context_instance`` arguments of rendering functions
 | 
				
			||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
					~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,6 +72,11 @@ Optional arguments
 | 
				
			||||||
    :ref:`namespaced URL resolution strategy <topics-http-reversing-url-namespaces>`
 | 
					    :ref:`namespaced URL resolution strategy <topics-http-reversing-url-namespaces>`
 | 
				
			||||||
    for more information.
 | 
					    for more information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .. deprecated:: 1.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       The ``current_app`` argument is deprecated. Instead you should set
 | 
				
			||||||
 | 
					       ``request.current_app``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. versionchanged:: 1.7
 | 
					.. versionchanged:: 1.7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   The ``dirs`` parameter was added.
 | 
					   The ``dirs`` parameter was added.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -633,10 +633,16 @@ the fully qualified name into parts and then tries the following lookup:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2. If there is a *current* application defined, Django finds and returns
 | 
					2. If there is a *current* application defined, Django finds and returns
 | 
				
			||||||
   the URL resolver for that instance. The *current* application can be
 | 
					   the URL resolver for that instance. The *current* application can be
 | 
				
			||||||
   specified as an attribute on the template context - applications that
 | 
					   specified as an attribute on the request. Applications that expect to
 | 
				
			||||||
   expect to have multiple deployments should set the ``current_app``
 | 
					   have multiple deployments should set the ``current_app`` attribute on
 | 
				
			||||||
   attribute on any :class:`~django.template.Context` or
 | 
					   the ``request`` being processed.
 | 
				
			||||||
   :class:`~django.template.RequestContext` that is used to render a template.
 | 
					
 | 
				
			||||||
 | 
					   .. versionchanged:: 1.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      In previous versions of Django, you had to set the ``current_app``
 | 
				
			||||||
 | 
					      attribute on any :class:`~django.template.Context` or
 | 
				
			||||||
 | 
					      :class:`~django.template.RequestContext` that is used to render a
 | 
				
			||||||
 | 
					      template.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   The current application can also be specified manually as an argument
 | 
					   The current application can also be specified manually as an argument
 | 
				
			||||||
   to the :func:`~django.core.urlresolvers.reverse` function.
 | 
					   to the :func:`~django.core.urlresolvers.reverse` function.
 | 
				
			||||||
| 
						 | 
					@ -707,10 +713,10 @@ Using this setup, the following lookups are possible:
 | 
				
			||||||
    {% url 'polls:index' %}
 | 
					    {% url 'polls:index' %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Note that reversing in the template requires the ``current_app`` be added as
 | 
					  Note that reversing in the template requires the ``current_app`` be added as
 | 
				
			||||||
  an attribute to the template context like this::
 | 
					  an attribute to the ``request`` like this::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def render_to_response(self, context, **response_kwargs):
 | 
					    def render_to_response(self, context, **response_kwargs):
 | 
				
			||||||
        response_kwargs['current_app'] = self.request.resolver_match.namespace
 | 
					        self.request.current_app = self.request.resolver_match.namespace
 | 
				
			||||||
        return super(DetailView, self).render_to_response(context, **response_kwargs)
 | 
					        return super(DetailView, self).render_to_response(context, **response_kwargs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* If there is no current instance - say, if we were rendering a page
 | 
					* If there is no current instance - say, if we were rendering a page
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,7 @@ class ShortcutTests(TestCase):
 | 
				
			||||||
        self.assertEqual(response.status_code, 200)
 | 
					        self.assertEqual(response.status_code, 200)
 | 
				
			||||||
        self.assertEqual(response.content, b'FOO.BAR../path/to/static/media/\n')
 | 
					        self.assertEqual(response.content, b'FOO.BAR../path/to/static/media/\n')
 | 
				
			||||||
        self.assertEqual(response['Content-Type'], 'text/html; charset=utf-8')
 | 
					        self.assertEqual(response['Content-Type'], 'text/html; charset=utf-8')
 | 
				
			||||||
        self.assertEqual(response.context.current_app, None)
 | 
					        self.assertFalse(hasattr(response.context.request, 'current_app'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_render_with_base_context(self):
 | 
					    def test_render_with_base_context(self):
 | 
				
			||||||
        with warnings.catch_warnings():
 | 
					        with warnings.catch_warnings():
 | 
				
			||||||
| 
						 | 
					@ -79,7 +79,7 @@ class ShortcutTests(TestCase):
 | 
				
			||||||
        with warnings.catch_warnings():
 | 
					        with warnings.catch_warnings():
 | 
				
			||||||
            warnings.filterwarnings("ignore", category=RemovedInDjango20Warning)
 | 
					            warnings.filterwarnings("ignore", category=RemovedInDjango20Warning)
 | 
				
			||||||
            response = self.client.get('/render/current_app/')
 | 
					            response = self.client.get('/render/current_app/')
 | 
				
			||||||
        self.assertEqual(response.context.current_app, "foobar_app")
 | 
					        self.assertEqual(response.context.request.current_app, "foobar_app")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_render_with_dirs(self):
 | 
					    def test_render_with_dirs(self):
 | 
				
			||||||
        with warnings.catch_warnings():
 | 
					        with warnings.catch_warnings():
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,11 @@
 | 
				
			||||||
from __future__ import unicode_literals
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from unittest import TestCase
 | 
					from unittest import TestCase
 | 
				
			||||||
 | 
					import warnings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django import template
 | 
					from django import template
 | 
				
			||||||
from django.utils import six
 | 
					from django.utils import six
 | 
				
			||||||
 | 
					from django.utils.deprecation import RemovedInDjango20Warning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .templatetags import custom
 | 
					from .templatetags import custom
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -253,8 +255,10 @@ class CustomTagTests(TestCase):
 | 
				
			||||||
        t = template.Template('{% load custom %}{% inclusion_tag_current_app %}')
 | 
					        t = template.Template('{% load custom %}{% inclusion_tag_current_app %}')
 | 
				
			||||||
        self.assertEqual(t.render(c).strip(), 'None')
 | 
					        self.assertEqual(t.render(c).strip(), 'None')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        c.current_app = 'advanced'
 | 
					        with warnings.catch_warnings():
 | 
				
			||||||
        self.assertEqual(t.render(c).strip(), 'advanced')
 | 
					            warnings.filterwarnings("ignore", category=RemovedInDjango20Warning)
 | 
				
			||||||
 | 
					            c = template.Context({}, current_app='advanced')
 | 
				
			||||||
 | 
					            self.assertEqual(t.render(c).strip(), 'advanced')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_15070_use_l10n(self):
 | 
					    def test_15070_use_l10n(self):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,10 @@
 | 
				
			||||||
from __future__ import unicode_literals
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from datetime import datetime
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import pickle
 | 
					import pickle
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
from datetime import datetime
 | 
					import warnings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from django.test import RequestFactory, SimpleTestCase
 | 
					from django.test import RequestFactory, SimpleTestCase
 | 
				
			||||||
from django.conf import settings
 | 
					from django.conf import settings
 | 
				
			||||||
| 
						 | 
					@ -12,6 +13,7 @@ from django.template.response import (TemplateResponse, SimpleTemplateResponse,
 | 
				
			||||||
                                      ContentNotRenderedError)
 | 
					                                      ContentNotRenderedError)
 | 
				
			||||||
from django.test import override_settings
 | 
					from django.test import override_settings
 | 
				
			||||||
from django.utils._os import upath
 | 
					from django.utils._os import upath
 | 
				
			||||||
 | 
					from django.utils.deprecation import RemovedInDjango20Warning
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_processor(request):
 | 
					def test_processor(request):
 | 
				
			||||||
| 
						 | 
					@ -252,11 +254,13 @@ class TemplateResponseTest(SimpleTestCase):
 | 
				
			||||||
        self.assertEqual(response.status_code, 504)
 | 
					        self.assertEqual(response.status_code, 504)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_custom_app(self):
 | 
					    def test_custom_app(self):
 | 
				
			||||||
        response = self._response('{{ foo }}', current_app="foobar")
 | 
					        with warnings.catch_warnings():
 | 
				
			||||||
 | 
					            warnings.filterwarnings("ignore", category=RemovedInDjango20Warning)
 | 
				
			||||||
 | 
					            response = self._response('{{ foo }}', current_app="foobar")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        rc = response.resolve_context(response.context_data)
 | 
					        rc = response.resolve_context(response.context_data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.assertEqual(rc.current_app, 'foobar')
 | 
					        self.assertEqual(rc.request.current_app, 'foobar')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_pickling(self):
 | 
					    def test_pickling(self):
 | 
				
			||||||
        # Create a template response. The context is
 | 
					        # Create a template response. The context is
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue