【问题标题】:Cant use JsonResponse in Django无法在 Django 中使用 JsonResponse
【发布时间】:2019-11-21 23:32:42
【问题描述】:

我有一堆值,我想从 views.py 函数发送到我在 Django 中的模板。我看到一些主题,最好的方法是json格式。所以我就这么做了。但是因为我的值不是ascii,所以我使用的是升级版,它可以在正常的Http response 下工作,但不能在JSON response 下工作。

这是我的代码

base = {weather_main_key : weather_main_values, wind_speed_key : wind_speed_value + "m", wind_deg_key : wind_deg_value, base_temp_key : base_temp_value + " ℃", base_press_key : base_press_value + " mbar", base_hum_key : base_hum_value + " % " }
        base = json.dumps(base, ensure_ascii=False).encode('utf8')
        return JsonResponse(json.dumps(base))

所以我有一个错误消息

In order to allow non-dict objects to be serialized set the safe parameter to False.

所以我照他说的做了

JsonResponse(json.dumps(base, safe=False, ensure_ascii=False).encode('utf8'))

现在错误是

__init__() got an unexpected keyword argument 'safe'

我不能动……

【问题讨论】:

  • JsonResponse 的主要思想是它会为你做序列化。

标签: python django python-3.x ascii utf


【解决方案1】:

哇,三重编码。你为什么要这么做?

你序列化为 json。然后,在对 JsonResponse 的调用中,再次序列化为 json。但是 JsonResponse 本身是做序列化的,所以你已经序列化了 3 次了。

停止;只需将 dict 传递给 JsonResponse。

base = {weather_main_key : weather_main_values, wind_speed_key : wind_speed_value + "m", wind_deg_key : wind_deg_value, base_temp_key : base_temp_value + " ℃", base_press_key : base_press_value + " mbar", base_hum_key : base_hum_value + " % " }
return JsonResponse(base)

【讨论】:

  • 顺便说一句。如何从 html 页面访问该数据?我将其发送到path('test/', views.weathere, name='weather'), 之类的网址,但我想将其插入我的 base.html
  • 不确定你在问什么。这样做的目的是通过 Ajax 请求它。如果您不这样做,则根本不需要单独的视图和响应。
  • 所以我通常可以通过base.html中的Ajax脚本下载它?
猜你喜欢
  • 2019-09-21
  • 2014-12-10
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 2016-04-20
  • 1970-01-01
  • 2017-02-07
相关资源
最近更新 更多