Javascript 在模板中通过django模型的JSON循环
我不知道如何在模板中使用javascripit循环thorugh JSON对象(我知道如何在HTML部分中循环,但我需要在javascript中循环)。我发现如果我在变量中保护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": [
<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 }}")