Opened 6 years ago
Last modified 6 years ago
#30698 closed Cleanup/optimization
`BaseDetailView` and `SingleObjectMixin` optimization. — at Version 1
| Reported by: | Davit Gachechiladze | Owned by: | nobody |
|---|---|---|---|
| Component: | Generic views | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
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)
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
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)
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.
Note:
See TracTickets
for help on using tickets.