3

我正在尝试序列化一些代表 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>

我是新手,显然做错了什么。任何帮助表示赞赏!

4

2 回答 2

5

一般来说,直接序列化一个django模型供前端使用并不是一个很好的主意,主要是因为安全性。如果您的模型上有不允许用户阅读的数据怎么办?

出于这个原因,您通常会在 javascript 中手动创建对象:

var objects = [];

{% for model in models %}
    objects[] = {
        name: {{ model.name }},
        date: {{ model.date }},
        // etc.
    };
{% endfor %}

这样,只有您在模板中明确定义的数据才能进入 javascript。如果您的模型将来发生更改并添加了敏感数据,则它不会出现在 javascript 对象中。

于 2013-06-04T15:54:01.467 回答
2

您可以使用 Django 的内置序列化,或仅使用Django Rest Framework中的序列化功能。我发现 Django Rest Framework 是一个更好的选择,即使对于简单的任务也是如此,因为它非常灵活并且在您自己的代码中需要更少的开销。

无论哪种方式,您都需要使用JSON.parse,如下所示:

var mutes = JSON.parse('{{ serialized_value }}');
于 2013-06-04T15:52:45.153 回答