Tôi nghĩ rằng vấn đề đã trở nên bối rối liên quan đến những gì bạn muốn. Tôi tưởng tượng rằng bạn không thực sự cố gắng đưa HTML vào phản hồi JSON, mà muốn trả về HTML hoặc JSON theo cách khác.
Trước tiên, bạn cần hiểu sự khác biệt cốt lõi giữa hai loại. HTML là một định dạng trình bày. Nó đề cập nhiều đến cách hiển thị dữ liệu hơn là chính dữ liệu. JSON thì ngược lại. Đó là dữ liệu thuần túy - về cơ bản là biểu diễn JavaScript của một số tập dữ liệu Python (trong trường hợp này) mà bạn có. Nó chỉ đóng vai trò như một lớp trao đổi, cho phép bạn di chuyển dữ liệu từ một khu vực của ứng dụng (chế độ xem) sang một khu vực khác của ứng dụng (JavaScript của bạn) mà thông thường không có quyền truy cập vào nhau.
Với ý nghĩ đó, bạn không "kết xuất" JSON và không có mẫu nào liên quan. Bạn chỉ đơn thuần chuyển đổi bất kỳ dữ liệu nào đang phát (rất có thể là những gì bạn đang chuyển làm bối cảnh cho mẫu của mình) sang JSON. Điều này có thể được thực hiện thông qua thư viện JSON của Django (simplejson), nếu đó là dữ liệu dạng tự do hoặc khuôn khổ tuần tự hóa của nó, nếu đó là bộ truy vấn.
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)
Serialization
from django.core import serializers
foos = Foo.objects.all()
data = serializers.serialize('json', foos)
Dù bằng cách nào, bạn sau đó chuyển dữ liệu đó vào phản hồi:
return HttpResponse(data, content_type='application/json')
[Chỉnh sửa] Trong Django 1.6 trở về trước, mã để trả lại phản hồi là
return HttpResponse(data, mimetype='application/json')
[EDIT]: simplejson đã bị xóa khỏi django , bạn có thể sử dụng:
import json
json.dumps({"foo": "bar"})
Hoặc bạn có thể sử dụng django.core.serializers
như mô tả ở trên.