Myślę, że problem stał się niejasny, jeśli chodzi o to, czego chcesz. Wyobrażam sobie, że tak naprawdę nie próbujesz umieścić kodu HTML w odpowiedzi JSON, ale raczej chcesz alternatywnie zwrócić HTML lub JSON.
Po pierwsze, musisz zrozumieć podstawową różnicę między nimi. HTML to format prezentacyjny. Zajmuje się bardziej sposobem wyświetlania danych niż samymi danymi. JSON jest odwrotny. To czyste dane - w zasadzie reprezentacja JavaScript jakiegoś zbioru danych Pythona (w tym przypadku), który posiadasz. Służy jedynie jako warstwa wymiany, umożliwiając przenoszenie danych z jednego obszaru aplikacji (widoku) do innego obszaru aplikacji (JavaScript), które zwykle nie mają do siebie dostępu.
Mając to na uwadze, nie „renderujesz” JSON i nie ma tam żadnych szablonów. Po prostu konwertujesz wszystkie dane w grze (najprawdopodobniej prawie to, co przekazujesz jako kontekst do swojego szablonu) na JSON. Można to zrobić za pomocą biblioteki JSON Django (simplejson), jeśli są to dane w dowolnym formacie, lub jego struktury serializacji, jeśli jest to zestaw zapytań.
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)
Serializacja
from django.core import serializers
foos = Foo.objects.all()
data = serializers.serialize('json', foos)
Tak czy inaczej, następnie przekazujesz te dane do odpowiedzi:
return HttpResponse(data, content_type='application/json')
[Edytuj] W Django 1.6 i wcześniejszych kod zwracał odpowiedź
return HttpResponse(data, mimetype='application/json')
[EDYCJA]: simplejson została usunięta z django , możesz użyć:
import json
json.dumps({"foo": "bar"})
Lub możesz użyć, django.core.serializers
jak opisano powyżej.