﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
20643	Examples in Chapter Using mixins with class-based views	michal@…	nobody	"I tried to use following examples:
https://docs.djangoproject.com/en/dev/topics/class-based-views/mixins/


{{{
import json
from django.http import HttpResponse
class JSONResponseMixin(object):
    response_class = HttpResponse
    def render_to_response(self, context, **response_kwargs):
        response_kwargs['content_type'] = 'application/json'
        return self.response_class(
            self.convert_context_to_json(context),
            **response_kwargs
        )
    def convert_context_to_json(self, context):
        return json.dumps(context)


from django.views.generic.detail import SingleObjectTemplateResponseMixin
class HybridDetailView(JSONResponseMixin, SingleObjectTemplateResponseMixin, BaseDetailView):
    def render_to_response(self, context):
        # Look for a 'format=json' GET argument
        if self.request.GET.get('format','html') == 'json':
            return JSONResponseMixin.render_to_response(self, context)
        else:
            return SingleObjectTemplateResponseMixin.render_to_response(self, context)

}}}


It seems to me, that attribute response_class = HttpResponse in JSONReponseMixin overlaps attribute response_class = TemplateResponse in TemplateResponseMixin (and SingleObjectTemplateResponseMixin) and breaks non-json requests.

Following code works but doesn't look like proper solution to me:

{{{
import json
from django.http import HttpResponse
class JSONResponseMixin(object):
    def render_to_response(self, context, **response_kwargs):
        response_kwargs['content_type'] = 'application/json'
        return HttpResponse(
            self.convert_context_to_json(context),
            **response_kwargs
        )
    def convert_context_to_json(self, context):
        return json.dumps(context)

}}}

Michal"	Bug	closed	Documentation	dev	Normal	fixed		bmispelon@…	Accepted	1	0	0	0	0	0
