Hi, While writing tests for views, I discovered the following code and wondered whether it is a feature or a potentially bad pattern...
* BaseListView sets self.object_list: https://github.com/django/django/blob/ec469ade2b04b94bfeb59fb0fc7d9300470be615/django/views/generic/list.py#L137 * Then BaseListView passes object_list as keyword argument to get_context_data(): https://github.com/django/django/blob/ec469ade2b04b94bfeb59fb0fc7d9300470be615/django/views/generic/list.py#L152 * But the first thing MultipleObjectMixin.get_context_data() does is kwargs.pop('object_list'): https://github.com/django/django/blob/ec469ade2b04b94bfeb59fb0fc7d9300470be615/django/views/generic/list.py#L108 * Note: this implementation makes "object_list" argument mandatory for get_context_data. Questions are: * could MultipleObjectMixin.get_context_data() use self.object_list directly? i.e. avoid passing it as kwarg in BaseListView. * looks like BaseListView.object_list could be some property(get_queryset), doesn't it? Here are notes about the use-case that made me ask... **Am I asking the right questions?** My use case is to write tests for class-based views. I'm testing get_context_data() of some custom ListView. Currently I have to pass it some arbitrary object_list argument, but I wish the "object_list" context data was computed automatically from get_queryset. Here is a test I wish I could write: .. code-block:: python:: class MyModelListViewTestCase(TestCase): """Test non-standard behaviour of MyModelListView.""" def test_context_data(self): """get_context_data() contains expected keys/values.""" instance = MyModel.objects.create() request = self.request_factory() # Uses django.test.RequestFactory view = self.view_factory(request) # Populates request, args and kwargs attributes, just like dispatch() would. data = view.get_context_data(**view.kwargs) # I also wish I could ``data = view.get_context_data()`` self.assertEqual(data['object_list'], [instance]) self.assertEqual(data['some_custom_context_var'], 'custom_value') Notice that I use "view.get_context_data(**view.kwargs)" because [https://github.com/django/django/blob/ec469ade2b04b94bfeb59fb0fc7d9300470be615/django/views/generic/base.py#L153 that's what TemplateView does]... and I really don't understand why BaseListView passes "object_list". In fact, I also wonder why get_context_data() is passed kwargs that are already made available as self.kwargs by dispatch... But I guess I'm missing something ;) ... Any idea? Regards, BenoƮt -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.

