Django - 在模板中显示Json或Httpresponse

时间:2017-04-30 16:02:28

标签: javascript python json django httpresponse

我在views.py中有这样的东西:

return JsonResponse({'foo': 'bar'})

我将如何显示" bar"在模板中?类似的东西:

   <h1 id="demo"></h1>
    <script>
    document.getElementById("demo").innerHTML = ?JsonResponse?;
    </script>

还是可以用http响应来完成?

 return HttpResponse("Bar")

和html:

<h1 id="demo"></h1>
    <script>
    document.getElementById("demo").innerHTML = ?HttpResponse?;
    </script>

1 个答案:

答案 0 :(得分:1)

确定。我们假设您有一个连接到视图功能的网址/yourURL。让我们调用这个函数索引:

from django.shortcuts import render
def index(request):
    data = {foo:'bar'}
    render(request,'path/to/yourTemplate.html',data)

我使用render作为快捷方式。在yourTemplate.html中,您可以在任何位置以{{foo}}的形式访问数据。要在不渲染的情况下将json对象发送到模板,请考虑以下模板(yourTemplate.html):

<div id='initialData'>{{foo}}</div>
<div id='jsondata'></div>

您需要一个新视图和一个ajax请求来从中获取信息。您可以在同一索引视图中执行此操作,也可以构建全新的URL和关联视图。让我们使用第二个选项。如果是这样,您构建了一个与/yourURL/download视图(views.py)相关联的新网址download

def download(request):
   data = {foo2:'bar2'}
   JsonResponse(data)

然后你需要一个ajax请求来调用这个视图并在成功时在div上写下响应(yourTemplate.html):

<script>
$.ajax({
    url: "/yourURL/download",
    type: 'get',
    success: function (data) {
      alert("Success");
      var div = document.getElementById('jsondata');
      div.innerHTML = div.innerHTML + data.foo;       

    }
  });
 </script>

瞧!你的屏幕上会有bar和bar2。要进一步详细说明,您需要一个与ajax调用关联的按钮,这样您就可以看到该页面实际上没有使用JsonResponse再次渲染。