# -*- coding: utf-8 -*- try: from functools import wraps except ImportError: from django.utils.functional import wraps from django.shortcuts import render_to_response from django.template import RequestContext def confirm_required(template_name, context_creator, key='__confirm__'): """ Decorator for views that need confirmation page. For example, delete object view. Decorated view renders confirmation page defined by template 'template_name'. If request.POST contains confirmation key, defined by 'key' parameter, then original view is executed. Context for confirmation page is created by function 'context_creator', which accepts same arguments as decorated view. Example ------- def remove_file_context(request, id): file = get_object_or_404(Attachment, id=id) return RequestContext(request, {'file': file}) @confirm_required('remove_file_confirm.html', remove_file_context) def remove_file_view(request, id): file = get_object_or_404(Attachment, id=id) file.delete() next_url = request.GET.get('next', '/') return HttpResponseRedirect(next_url) Example of HTML template ------------------------