javascript - Django - 在模板中显示 Json 或 Httpresponse

标签 javascript python json django httpresponse

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

return JsonResponse({'foo': '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>

最佳答案

好的。假设您有一个 url /yourURL 连接到一个 View 函数。我们称这个函数为索引:

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>

您需要一个新 View 和一个 ajax 请求来从中获取信息。您可以在同一个索引 View 中执行此操作,也可以构建一个全新的 url 和关联 View 。让我们使用第二个选项。事情是这样的,您构建一个连接到 download View (views.py) 的新 URL /yourURL/download:

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

然后您需要一个 ajax 请求来调用此 View 并在成功时将响应写入 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 呈现。

关于javascript - Django - 在模板中显示 Json 或 Httpresponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43708387/

相关文章:

python - 如何在 Gtk3 中获取 DrawingArea 窗口句柄?

python - 如何查找列表中最常见的元素(使用 all())

python - 在python中重新读取csv文件而不再次加载它

java - @JsonView : different perspectives

javascript - 在 JS 中,如何在给定 URL 和 application/x-www-form-urlencoded 字符串的情况下进行 POST?

javascript - 在javascript中运行多个连续事件中的最后一个事件

javascript - 如何强制元素的默认CSS

javascript - Angular-Charts - 饼图,显示每个数据切片内的标签

javascript - 如何在本地存储中存储和检索许多 JavaScript 原语

javascript - 依赖于异步调用的 JSON 迭代