python Django視圖返回json而不使用模板





4 Answers

在Django 1.7中,使用內置的JsonResponse更容易。

https://docs.djangoproject.com/en/dev/ref/request-response/#jsonresponse-objects

# import it
from django.http import JsonResponse

def my_view(request):

    # do something with the your data
    data = {}

    # just return a JsonResponse
    return JsonResponse(data)
python html django json

這與此問題有關: Django根據客戶端python返回json和html

我有一個django應用程序的命令行python api。 當我通過api訪問應用程序時它應該返回json並且使用瀏覽器它應該返回html。 我可以使用不同的URL來訪問不同的版本,但是如何使用一個模板在views.py中呈現html模板和json?

要呈現我將使用的HTML:

 return render_to_response('sample/sample.html....)

但是如果沒有放入json模板,我將如何為json做同樣的事情呢? (內容類型應該是application / json而不是text / html)

編輯1:

什麼會決定json和html輸出?

所以在我看來:

 if something:
      return render_to_response('html_template',.....)
 else:
      return HttpReponse(jsondata,mimetype='application/json')

謝謝







您還可以檢查rfc中指定的請求接受內容類型。 通過這種方式,您可以默認呈現HTML以及客戶端接受application / jason的位置,您可以在響應中返回json而無需模板




如果要將結果作為渲染模板傳遞,則必須加載並渲染模板,將渲染結果傳遞給json。這可能看起來像這樣:

from django.template import loader, RequestContext

#render the template
t=loader.get_template('sample/sample.html')
context=RequestContext()
html=t.render(context)

#create the json
result={'html_result':html)
json = simplejson.dumps(result)

return HttpResponse(json)

這樣,您可以將呈現的模板作為json傳遞給您的客戶端。 如果你想完全替換ie,這可能很有用。 包含許多不同的元素。






Related