Accessing python list in javascript as an array
You can also use
{{ test|safe }}
or
{{ test|tojson|safe }}
The safe
filter is to be used within script tags.
When you insert variable to template
{{ test }}
it take object representation. For list of int[1,2,3,4,5,6]
it will be rendered as[1, 2, 3, 4, 5, 6]
, so it is valid javascript array, but this method not safe complex objects without javascript-like representation, for example, test = [1,2,3,4,5,any] will rendered as[1, 2, 3, 4, 5, <built-in function any>]
, however this is just example and will never work.To implicitly cast to javascript object in flask exist
tojson
filter:<script> var counts = {{ test|tojson }}; </script>
So if the object is JSON serializable, then all will be rendered, otherwise the template engine will raise an exception.
You also can send javascript code to your template:
from flask import json return render_template("sample.html",test=json.dumps(test))
but it is not a good approach and it's better use
tojson
filter that is also HTML markup safe.I prefer to not mix any javascript code within templates and split templates, javascript and javascript data with ajax. If this approach is hard I would prefer to use
tojson
filter.