Javascript 在模板中通过django模型的JSON循环

Javascript 在模板中通过django模型的JSON循环,javascript,python,json,django,Javascript,Python,Json,Django,我不知道如何在模板中使用javascripit循环thorugh JSON对象(我知道如何在HTML部分中循环,但我需要在javascript中循环)。我发现如果我在变量中保护JSON对象,如下所示: <script> let schedule = "{{ barber.schedule.schedule_day | safe}}" </script> 这就是来自模型的JSON的样子 { "schedule_day": [

我不知道如何在模板中使用javascripit循环thorugh JSON对象(我知道如何在HTML部分中循环,但我需要在javascript中循环)。我发现如果我在变量中保护JSON对象,如下所示:

<script>
let schedule = "{{ barber.schedule.schedule_day | safe}}"
</script>
这就是来自模型的JSON的样子

{
   "schedule_day": [
      {
         "start": 8,
         "end": 10
      },
      {
         "start": 12,
         "end": 14
      },
      {
         "start": 15,
         "end": 16
      }
   ]
}
views.py

class Barber_schedule(DetailView):
    model = Barber
    context_object_name = 'barber'
models.py

schedule_template = '''
{
    "schedule_day": [
        {
            "start": 8,
            "end": 16
        }
    ]
}
'''
class Barber(models.Model):
    name = models.CharField(max_length=30)
    start_time = models.IntegerField(default=8, validators=[MaxValueValidator(16), MinValueValidator(0)])
    JSON_schedule_template = json.loads(schedule_template)
    schedule = models.JSONField(default=JSON_schedule_template)
    photo = models.ImageField(upload_to='barber_avatar', default='default.png')

    def __str__(self):
        return self.name

您的javascript没有解析JSON字符串

let schedule = JSON.parse("{{ barber.schedule.schedule_day | safe }}")
但是,这也不起作用,因为
schedule\u day
不是有效的JSON字符串,它只是字段中对象的字符串表示形式(
\u str\u()

字段是对象,而不是数据库中的字符串,这是因为
JSONField
类型会自动将该数据库字符串与对象反序列化。通常这很方便,因为您希望在视图中迭代JSON中的对象,但是,在这种情况下,您只需要将字符串发送到前端

最简单的解决方案是将
JSONField
更改为
TextField
。但是,如果您依赖于其他地方的自动反序列化,那么您必须在对象到达模板之前将其重新序列化为视图中的字符串,然后使用Javascript将JSON字符串解析为对象

let schedule = JSON.parse("{{ barber.schedule.schedule_day | safe }}")