In the examples, I constantly see **kwargs passed around with no mention of where it is coming from:
from django.views.generic import DetailView
from books.models import Publisher, Book
class PublisherDetailView(DetailView):
    context_object_name = "publisher"
    model = Publisher
    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(PublisherDetailView, self).get_context_data(**kwargs)
        # Add in a QuerySet of all the books
        context['book_list'] = Book.objects.all()
        return context
Where is **kwargs being magically plucked from?
Also, does this not seem like a whole lot of extra work just to add a single dictionary object?
 
     
    