【问题标题】:Django - display Json or Httpresponse in templateDjango - 在模板中显示 Json 或 Httpresponse
【发布时间】:2017-09-28 05:39:42
【问题描述】:

我在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>

【问题讨论】:

  • 您是否向返回 JsonReponse 的 URL/视图发出 Ajax 请求?或者,您是否只想将 JSON 内容从视图传递到模板?
  • @teewuane 我只想将 JSON 内容从视图传递到模板。
  • 为什么不用这个?

    {{foo}}

  • 我想传入文本而不必刷新,因为 json 会在模态表单验证后通过
  • @MannymAnn 我很困惑。您能描述一下工作流程吗?

标签: javascript python json django httpresponse


【解决方案1】:

好的。假设您有一个 url /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 和关联视图。让我们使用第二个选项。它是这样的,你建立一个新的 URL /yourURL/download 连接到一个 download 视图 (views.py):

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 再次呈现。

【讨论】:

    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 2019-12-22
    • 2015-05-14
    • 2016-02-17
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多