#14878 closed (fixed)
Issues in generic views (list)
| Reported by: | Diego Andrés Sanabria Martín | Owned by: | nobody |
|---|---|---|---|
| Component: | Generic views | Version: | 1.3-alpha |
| Severity: | Keywords: | ||
| Cc: | camilo.nova@… | Triage Stage: | Accepted |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | yes | Patch needs improvement: | yes |
| Easy pickings: | no | UI/UX: | no |
Description
The code in http://code.djangoproject.com/browser/django/trunk/django/views/generic/list.py have a 'wrong' behavior
def get_context_object_name(self, object_list):
"""
Get the name of the item to be used in the context.
"""
if self.context_object_name:
return self.context_object_name
elif hasattr(object_list, 'model'):
return smart_str(object_list.model._meta.verbose_name_plural)
else:
return None
def get_context_data(self, **kwargs):
"""
Get the context for this view.
"""
queryset = kwargs.pop('object_list')
page_size = self.get_paginate_by(queryset)
if page_size:
paginator, page, queryset, is_paginated = self.paginate_queryset(queryset, page_size)
context = {
'paginator': paginator,
'page_obj': page,
'is_paginated': is_paginated,
'object_list': queryset
}
else:
context = {
'paginator': None,
'page_obj': None,
'is_paginated': False,
'object_list': queryset
}
context.update(kwargs)
context_object_name = self.get_context_object_name(queryset)
if context_object_name is not None:
context[context_object_name] = queryset
return context
- The method get_context_object_name take the verbose_name_plural of the models which could contains spaces or be a translated string
- The generated context_object_name don't ends in '_list' and could be a backward compatibility problem
- In the documentation of Class-Based Generic Views dont talk about the context will have a variable from the models name
- The context result contains twice the queryset, first in 'objects_list' and second in the new dinamic generated and if the user/developer want to serialize the data to json or cvs or xml in a generic way, i mean write something like a JSONResponseMixin the data will have duplicate queryset, that don't looks right
Attachments (1)
Change History (9)
by , 15 years ago
| Attachment: | generic.diff added |
|---|
comment:1 by , 15 years ago
| Has patch: | set |
|---|
comment:2 by , 15 years ago
| Patch needs improvement: | set |
|---|
comment:3 by , 15 years ago
comment:4 by , 15 years ago
| Cc: | added |
|---|
comment:5 by , 15 years ago
| Needs tests: | set |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
comment:6 by , 15 years ago
To address the points specifically:
- The usage of verbose_name is a problem; it's addressed in detail.py, but not in list.py, and neither case is tested.
- There are no backwards compatibility concerns, because this is new API. The _list suffix was dropped because if you're manually specifying a name, you should have full control.
- The use of verbose_name based context variables is mentioned in the reference docs, but not the topic guide. This is an omission that should be corrected.
- Retaining object_list is an intentional design decision -- it ensures you can always use a generic template.
comment:7 by , 15 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Better Patch