Source code for atom.views

from django.contrib import messages
from django.core.exceptions import ImproperlyConfigured
from django.http import HttpResponseRedirect
from django.utils.encoding import force_text
from django.utils.translation import ugettext as _
from django.views.generic.detail import (BaseDetailView,
                                         SingleObjectTemplateResponseMixin)


[docs]class FormInitialMixin(object):
[docs] def get_initial(self, *args, **kwargs): initial = super(FormInitialMixin, self).get_initial(*args, **kwargs) initial.update(self.request.GET.dict()) return initial
[docs]class MessageMixin(object): success_message = None
[docs] def get_success_message(self): if self.success_message is None: raise NotImplementedError("Provide success_message or get_success_message") return self.success_message.format(**self.object.__dict__)
[docs]class DeleteMessageMixin(object): hide_field = None
[docs] def get_success_message(self): template = dict(object=self.object, verbose_name=self.model._meta.verbose_name) return _("{verbose_name} {object} deleted!").format(**template)
[docs] def delete(self, request, *args, **kwargs): self.object = self.get_object() success_url = self.get_success_url() if self.hide_field: setattr(self.object, self.hide_field, False) self.object.save() else: self.object.delete() messages.add_message(request, messages.SUCCESS, self.get_success_message()) return HttpResponseRedirect(success_url)
[docs]class ActionMixin(object): success_url = None
[docs] def action(self): raise ImproperlyConfigured("No action to do. Provide a action body.")
[docs] def post(self, request, *args, **kwargs): self.object = self.get_object() success_url = self.get_success_url() self.action() return HttpResponseRedirect(success_url)
[docs] def get_success_url(self): if self.success_url: self.success_url = force_text(self.success_url) return self.success_url.format(**self.object.__dict__) else: raise ImproperlyConfigured( "No URL to redirect to. Provide a success_url.")
[docs]class BaseActionView(ActionMixin, BaseDetailView): """ Base view for action on an object. Using this base class requires subclassing to provide a response mixin. """
[docs]class ActionView(SingleObjectTemplateResponseMixin, BaseActionView): template_name_suffix = '_action'
[docs]class ActionMessageMixin(MessageMixin):
[docs] def post(self, request, *args, **kwargs): response = super(ActionMessageMixin, self).post(request, *args, **kwargs) messages.add_message(request, messages.SUCCESS, self.get_success_message()) return response
[docs]class CreateMessageMixin(object):
[docs] def get_form_valid_message(self): template = dict(object=self.object, verbose_name=self.model._meta.verbose_name) return _("{verbose_name} {object} created!").format(**template)
[docs]class UpdateMessageMixin(object):
[docs] def get_form_valid_message(self): template = dict(object=self.object, verbose_name=self.model._meta.verbose_name) return _("{verbose_name} {object} updated!").format(**template)