Creo que el tema se ha confundido con respecto a lo que quieres. Me imagino que en realidad no está tratando de poner HTML en la respuesta JSON, sino que desea devolver HTML o JSON alternativamente.
Primero, debe comprender la diferencia fundamental entre los dos. HTML es un formato de presentación. Se trata más de cómo mostrar datos que de los datos en sí. JSON es lo contrario. Son datos puros, básicamente una representación de JavaScript de algún conjunto de datos de Python (en este caso) que tiene. Sirve simplemente como una capa de intercambio, lo que le permite mover datos de un área de su aplicación (la vista) a otra área de su aplicación (su JavaScript) que normalmente no tienen acceso entre sí.
Con eso en mente, no "renderiza" JSON y no hay plantillas involucradas. Simplemente convierte cualquier dato que esté en juego (probablemente más o menos lo que está pasando como contexto a su plantilla) a JSON. Lo cual se puede hacer a través de la biblioteca JSON de Django (simplejson), si son datos de forma libre, o su marco de serialización, si es un conjunto de consultas.
simplejson
from django.utils import simplejson
some_data_to_dump = {
'some_var_1': 'foo',
'some_var_2': 'bar',
}
data = simplejson.dumps(some_data_to_dump)
Publicación por entregas
from django.core import serializers
foos = Foo.objects.all()
data = serializers.serialize('json', foos)
De cualquier manera, luego pasa esos datos a la respuesta:
return HttpResponse(data, content_type='application/json')
[Editar] En Django 1.6 y versiones anteriores, el código para devolver la respuesta era
return HttpResponse(data, mimetype='application/json')
[EDITAR]: simplejson fue eliminado de django , puedes usar:
import json
json.dumps({"foo": "bar"})
O puede usar el django.core.serializers
como se describe arriba.