我不知道如何用模板中的javascripit循环thorugh JSON对象(我知道如何在HTML部分中做到这一点,但我需要它在javascript中)。我发现如果我将JSON对象放在这样的变量中,则可以:
<script>
let schedule = "{{ barber.schedule.schedule_day | safe}}"
</script>
它保存为字符串类型,我无法使用它,schedule[0]
显示第一个字符,这是[
我无法进行JSON.parse的原因,因为错误显示为“位置2的JSON中出现意外令牌'”,我猜这是因为我的日程表中有单引号迷茫的
这是我在console.log上的日程安排的样子
[{'start': 8, 'end': 10}, {'start': 12, 'end': 14}, {'start': 15, 'end': 16}]
这就是模型中的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_day
它不是有效的JSON字符串,它只是__str__()
字段中对象的字符串表示形式()。
字段是对象,而不是JSONField
数据库中的字符串的原因是因为该类型会自动在对象之间反序列化该数据库字符串。通常,这很方便,因为您要遍历视图中JSON中的对象,但是,在这种情况下,您只需要将字符串发送到前端即可。
最简单的解决方案是将更JSONField
改为TextField
。但是,如果您依靠其他地方的自动反序列化,则必须在对象到达模板之前将它们重新序列化为视图中的字符串,然后使用Javascript将JSON字符串解析为对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句