잡동사니

반응형

질문

플라스크의 자바스크립트에 변수를 전달하려고합니다.하지만 다음 오류가 발생합니다. TypeError : Object of type MyClass is not JSON serializable

암호:

route.py :

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

myObj 는 MyClass 유형의 사용자 정의 class 객체입니다.

index.html :

    <script src="{{ url_for('static', filename='my_script.js', type="module") }}" crossorigin="anonymous"
            defer>
    </script>
    <script>
        let data = {{ data|tojson }};
    </script>

my_script.js :

console.log(data);

{{data | tojson}}대신 {{data}} 를 작성하려고했지만 오류가 발생합니다.Uncaught SyntaxError : Unexpected token '&' and my_script.js? type = module : 1 Uncaught ReferenceError : data is not defined at my_script.js? type = module : 1

질문이 많은 것을 알고 있지만이 문제를 해결하는 질문을 찾지 못했습니다.


답변1

여기서 문제는 Python 객체를 Javascript에 전달하려고한다는 것입니다. 작동하지 않을 것입니다. 가장 좋은 방법은 Python과 Javascript간에 호환되는 JSON으로 변환하는 것입니다.

json모듈을 사용하여 사전을 직렬화 할 수 있습니다. 그러나 MyClass 의 Python 객체는 JSON 직렬화가 가능하지 않습니다. 대신 객체의 속성 사전 인 __ data __속성을 직렬화 할 수 있어야합니다.

다음과 같이 Python을 변경하십시오.

import json

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


 

 

 

 

출처 : https://stackoverflow.com/questions/62939572/how-to-serialize-a-python-class-to-pass-onto-javascript

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band