#30698: `BaseDetailView` and `SingleObjectMixin` optimization.
------------------------------------------------+------------------------
               Reporter:  Davit Gachechiladze   |          Owner:  nobody
                   Type:  Cleanup/optimization  |         Status:  new
              Component:  Generic views         |        Version:  2.2
               Severity:  Normal                |       Keywords:
           Triage Stage:  Unreviewed            |      Has patch:  0
    Needs documentation:  0                     |    Needs tests:  0
Patch needs improvement:  0                     |  Easy pickings:  0
                  UI/UX:  0                     |
------------------------------------------------+------------------------
 {{{#!python
 class SingleObjectMixin(ContextMixin):

     def get_context_data(self, **kwargs):
         """Insert the single object into the context dict."""
         context = {}
         if self.object:
             context['object'] = self.object
             context_object_name =
 self.get_context_object_name(self.object)
             if context_object_name:
                 context[context_object_name] = self.object
         context.update(kwargs)
         return super().get_context_data(**context)
 }}}

 {{{#!python
 class BaseDetailView(SingleObjectMixin, View):
     """A base view for displaying a single object."""
     def get(self, request, *args, **kwargs):
         self.object = self.get_object()
         context = self.get_context_data(object=self.object)
         return self.render_to_response(context)
 }}}

 **Hi,,,

 In `BaseDetailView.get(self, request, *args, **kwargs)`, we have line like
 `context = self.get_context_data(object=self.object)`. Why should we pass
 `object=self.object` ? It's redundant (IMHO). I think, it's better idea to
 implement `SingleObjectMixin.get_context_data` and `BaseDetailView.get`
 like this. Code below
 **
 {{{#!python
 class SingleObjectMixin(ContextMixin):
     def get_context_data(self, *, object=None, **kwargs):
         """Insert the single object into the context dict."""
         object = object if object is not None else self.object
         context = {}
         if object:
             context['object'] = object
             context_object_name = self.get_context_object_name(object)
             if context_object_name:
                 context[context_object_name] = object
         context.update(kwargs)
         return super().get_context_data(**context)
 }}}

 {{{#!python
 class BaseDetailView(SingleObjectMixin, View):
     """A base view for displaying a single object."""
     def get(self, request, *args, **kwargs):
         self.object = self.get_object()
         context = self.get_context_data()
         return self.render_to_response(context)
 }}}

 Also, `SingleObjectMixin` will be implemented in a same fashion as
 `MultipleObjectMixin` is this moment.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30698>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/052.ead16605558c26ca96b5ed3b20409f74%40djangoproject.com.

Reply via email to