在Python / Django模板中序列化模型

时间:2013-06-04 15:46:52

标签: python django django-templates

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

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

2 个答案:

答案 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 }}');