Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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类以传递到javascript_Javascript_Python_Html_Flask_Jinja2 - Fatal编程技术网

如何序列化python类以传递到javascript

如何序列化python类以传递到javascript,javascript,python,html,flask,jinja2,Javascript,Python,Html,Flask,Jinja2,我试图将一个变量传递到flask中的javascript上。 但是我得到了以下错误:TypeError:MyClass类型的对象不是JSON可序列化的 代码: routes.py: @app.route('/') @app.route('/index') def index(): data = { "foo": myObj } return render_template('index.html', data=data) 请注意,my

我试图将一个变量传递到flask中的javascript上。 但是我得到了以下错误:
TypeError:MyClass类型的对象不是JSON可序列化的

代码:

routes.py:

@app.route('/')
@app.route('/index')
def index():
    data = {
        "foo": myObj
    }
    return render_template('index.html', data=data)
请注意,
myObj
是MyClass类型的自定义类对象

index.html:

    <script src="{{ url_for('static', filename='my_script.js', type="module") }}" crossorigin="anonymous"
            defer>
    </script>
    <script>
        let data = {{ data|tojson }};
    </script>
我试图简单地编写
{{data}}
而不是
{{data|tojson}
,但是我得到了错误:
Uncaught SyntaxError:Unexpected token'&'
my_script.js?type=module:1 Uncaught ReferenceError:my_script.js?type=module:1未定义数据


我知道有很多问题,但我找不到解决这个问题的方法。

这里的问题是您试图将Python对象传递给Javascript。这是行不通的。最好的方法是将其转换为JSON,这在Python和Javascript之间是兼容的

使用
json
模块,您可以序列化词典。但是,
MyClass
的Python对象不可JSON序列化。您应该能够序列化
\uuuu data\uuu
属性,它是对象中属性的字典

按如下方式更改Python:

import json

@app.route('/')
@app.route('/index')
def index():
    data = {
        "foo": myObj.__dict__
    }
    return render_template('index.html', data=json.dumps(data))
 

这里的问题是您试图将Python对象传递给Javascript。这是行不通的。最好的方法是将其转换为JSON,这在Python和Javascript之间是兼容的

使用
json
模块,您可以序列化词典。但是,
MyClass
的Python对象不可JSON序列化。您应该能够序列化
\uuuu data\uuu
属性,它是对象中属性的字典

按如下方式更改Python:

import json

@app.route('/')
@app.route('/index')
def index():
    data = {
        "foo": myObj.__dict__
    }
    return render_template('index.html', data=json.dumps(data))
 

事实上,它奏效了。我不知道应该将其作为字符串传递,应该提到的是,在javascript中,如果需要,应该将json重新组装为对象<在我的例子中,code>data=JSON.parse(data)
,确实有效。我不知道应该将其作为字符串传递,应该提到的是,在javascript中,如果需要,应该将json重新组装为对象<在我的例子中,code>data=JSON.parse(data)。