3

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"]"

3 Answers 3

7

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 }};
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks, unfortunately that did not work. I just got two less characters returned as it seems it was counting the quote marks as well. My return output was changed from 23 to 21 :return outout>>>>> 21["abc", "def", "hij"]
If it's a JSON string, parse it with JSON.parse() (in Javascript).
1

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

Comments

0

Thanks,it works for me.

<script>
  var divlist = {{ pylist | tojson }};
  for(i=0; i < divlist.length; i++){
       divId = divlist[i];
       console.log(divId);
   }
</script>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.