【问题标题】:Return JSON response using Django template system使用 Django 模板系统返回 JSON 响应
【发布时间】:2014-10-14 10:16:30
【问题描述】:

有可能吗? 我试过了:

def jsonview(request):
  context = {}
  context['date'] = datetime.now()
  return render(request, "json.html", context, content_type="application/json")

json.html 文件:

{% load i18n %}

'{"date": "{{ date|escapejs }}", "test": "hello"}' 

回复是:

'\n\n{"date": "2014\u002D11\u002D13 11:58:31.635102", "test": "hello"}' 

所以错误是:

SyntaxError: JSON.parse: unexpected character at line 3 column 1 of the JSON data

【问题讨论】:

  • 为什么要这样做,而不是在视图中将其构建为字典并使用json.dumps()?
  • 利用 django 模板。您不能转储日期时间对象,但您应该首先重现 django 模板的作用。

标签: json django


【解决方案1】:

简单的方法是首先将模板中的数据呈现为字符串,然后将其作为 json 响应,如下面的示例代码。

from django.template.loader import render_to_string
from django.http import HttpResponse
def jsonview(request):
      context = {}
      context['data'] = render_to_string("json.html", {'date': datetime.now()})
      return HttpResponse(json.dumps(context), content_type="application/json")

【讨论】:

    【解决方案2】:

    您应该使用 Django 模板标签。您可以创建自己的custom template tag 或使用built-in ones

    在这种情况下,您可以在 json.html 文件中使用 templatetag now:

    {% now "SHORT_DATETIME_FORMAT" %}
    

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 2016-04-19
      • 2021-09-21
      • 2017-10-09
      • 1970-01-01
      • 2021-10-18
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多