Bence ne istediğinle ilgili konu karıştı. Aslında HTML'yi JSON yanıtına koymaya çalışmadığınızı, bunun yerine alternatif olarak HTML veya JSON döndürmek istediğinizi hayal ediyorum.
İlk olarak, ikisi arasındaki temel farkı anlamanız gerekir. HTML bir sunum biçimidir. Verilerin kendisinden çok verilerin nasıl görüntüleneceği ile ilgilenir. JSON bunun tam tersidir. Saf veridir - temelde sahip olduğunuz bazı Python (bu durumda) veri kümesinin JavaScript temsili. Yalnızca bir değişim katmanı görevi görerek, verileri uygulamanızın bir alanından (görünüm) uygulamanızın normalde birbirine erişimi olmayan başka bir alanına (JavaScript'iniz) taşımanıza olanak tanır.
Bunu göz önünde bulundurarak, JSON'u "oluşturmazsınız" ve ilgili şablon yoktur. Yalnızca oyunda olan verileri (büyük olasılıkla şablonunuza bağlam olarak aktardığınız şeyi) JSON'a dönüştürürsünüz. Bu, serbest biçimli veri ise Django'nun JSON kitaplığı (simplejson) veya bir sorgu kümesiyse serileştirme çerçevesi aracılığıyla yapılabilir.
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)
Serileştirme
from django.core import serializers
foos = Foo.objects.all()
data = serializers.serialize('json', foos)
Her iki durumda da, bu verileri yanıta iletirsiniz:
return HttpResponse(data, content_type='application/json')
[Düzenle] Django 1.6 ve önceki sürümlerde, yanıt döndürülecek kod
return HttpResponse(data, mimetype='application/json')
[DÜZENLE]: simplejson django'dan kaldırıldı , şunları kullanabilirsiniz:
import json
json.dumps({"foo": "bar"})
Veya django.core.serializers
yukarıda açıklandığı gibi kullanabilirsiniz.