Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Django模板中的序列化模型_Python_Django_Django Templates - Fatal编程技术网

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

Python/Django模板中的序列化模型,python,django,django-templates,Python,Django,Django Templates,我试图序列化一些在django模板中表示用户设置的模型。以下是我正在做的: <script type="text/javascript"> var mutes = {{ user.appuser.mutes.all|safe }}; </script> var mutes={{user.appuser.mutes.all | safe}; 我得到的不是json,而是以下内容: <script type="text/javascript"> v

我试图序列化一些在django模板中表示用户设置的模型。以下是我正在做的:

<script type="text/javascript">
   var mutes = {{ user.appuser.mutes.all|safe }};
</script>

var mutes={{user.appuser.mutes.all | safe};
我得到的不是json,而是以下内容:

<script type="text/javascript">
   var mutes = [<Mute: Mute object>, <Mute: Mute object>];
</script>

var mutes=[,];

我是新手,显然做错了什么。感谢您的帮助

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

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

var mutes = JSON.parse('{{ serialized_value }}');

一般来说,直接序列化django模型以便在前端使用不是一个好主意,主要是因为安全性。如果您的模型中存在不允许用户读取的数据,该怎么办

因此,您通常会手动在javascript中创建对象:

var objects = [];

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

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

|safe
与序列化无关。在我的例子中,我必须使用
JSON.parse({{serialized_values | safe}}')
在本例中如何将“models”变量传递到外部js文件中?Django将阻止这样做,因为它不可JSON序列化