我正在尝试序列化一些代表django模板中用户设置的模型。这就是我正在做的事情:
<script type="text/javascript">
var mutes = {{ user.appuser.mutes.all|safe }};
</script>
而不是json,我得到以下内容:
<script type="text/javascript">
var mutes = [<Mute: Mute object>, <Mute: Mute object>];
</script>
我是新手,显然做错了什么。任何帮助表示赞赏!
答案 0 :(得分:5)
通常,直接序列化django模型以供在前端使用并不是一个好主意,主要是因为安全性。如果您的模型上的数据不允许您的用户阅读,该怎么办?
出于这个原因,您通常会手动在javascript中创建对象:
var objects = [];
{% for model in models %}
objects[] = {
name: {{ model.name }},
date: {{ model.date }},
// etc.
};
{% endfor %}
这样,只有您在模板中明确定义的数据才能进入javascript。如果您的模型将来发生变化并添加敏感数据,它将不会出现在javascript对象中。
答案 1 :(得分:0)
您可以使用Django的内置serialization,或仅使用Django Rest Framework中的序列化功能。我发现Django Rest Framework是一个更好的选择,即使是简单的任务,因为它非常灵活,并且在你自己的代码中需要更少的开销。
无论哪种方式,您都需要使用JSON.parse
,如下所示:
var mutes = JSON.parse('{{ serialized_value }}');