Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

flask python list to javascript

I am using python flask temple to build a site. I have a case where I want to send a python list to a java script. The python list contains three objects however when I do list1.length in the java script environment I see the length of this list is 23. This is most likely because java script is identifying it as a string. My question is how to make the python list stay a list once it's passed into javascript ?

# my route with python list1
@app.route('/chart_sandbox')
def chart_sandbox():

    list1 = ['abc', 'def', 'hij']

    return render_template("chart_sandbox.html", list1=json.dumps(list1))




# My Java script
<script type="text/javascript">

    var list1 = '{{list1|tojson}}'
    var listLength = list1.length


    document.write(listLength)
    document.write(list1)

</script>

# this is what is returned to me. As you can see java script length is seen 
#as 23 instead of 3
23"["abc", "def", "hij"]"
like image 616
Max Powers Avatar asked Nov 29 '25 11:11

Max Powers


2 Answers

Remove the quotes around the jinja text. That's converting your list into a string-representation of a list. Something like this should work:

var list1 = {{ list1 | tojson }};
like image 108
dizzyf Avatar answered Dec 01 '25 01:12

dizzyf


This worked me, I wrapped the list with the or operation and tojson in double curly brackets as an argument in the JSON.parse function, to make it a JavaScript object.

let list1 = JSON.parse('{{ list1 | tojson }}');

If you have no plans to modify the data in JavaScript use this instead 👇🏽

const list1 = JSON.parse('{{ list1 | tojson }}');

like image 39
Miebaka Avatar answered Dec 01 '25 01:12

Miebaka



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!