Я думаю, что проблема запуталась в том, что вы хотите. Я предполагаю, что вы на самом деле не пытаетесь поместить HTML в ответ JSON, а скорее хотите альтернативно вернуть HTML или JSON.
Во-первых, вам нужно понять основную разницу между ними. HTML - это формат представления. Он больше касается того, как отображать данные, чем сами данные. JSON - наоборот. Это чистые данные - в основном представление JavaScript некоторого набора данных Python (в данном случае), который у вас есть. Он служит просто уровнем обмена, позволяя вам перемещать данные из одной области вашего приложения (представления) в другую область вашего приложения (ваш JavaScript), которые обычно не имеют доступа друг к другу.
Имея это в виду, вы не будете «отображать» JSON, и в нем не будут задействованы шаблоны. Вы просто конвертируете все данные, которые находятся в игре (скорее всего, в значительной степени то, что вы передаете в качестве контекста в свой шаблон) в JSON. Это можно сделать либо с помощью библиотеки JSON Django (simplejson), если это данные произвольной формы, либо с помощью ее инфраструктуры сериализации, если это набор запросов.
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)
Сериализация
from django.core import serializers
foos = Foo.objects.all()
data = serializers.serialize('json', foos)
В любом случае вы затем передаете эти данные в ответ:
return HttpResponse(data, content_type='application/json')
[Edit] В Django 1.6 и ранее код для возврата ответа был
return HttpResponse(data, mimetype='application/json')
[EDIT]: simplejson был удален из django , вы можете использовать:
import json
json.dumps({"foo": "bar"})
Или вы можете использовать, django.core.serializers
как описано выше.