web-dev-qa-db-fra.com

Accéder à la liste python en javascript sous forme de tableau

J'ai ceci dans mon flacon views.py

    def showpage():
      ...
      test = [1,2,3,4,5,6]
      return render_template("sample.html",test=test)

J'ai ceci dans mon échantillon .html

    <script> var counts = {{test}}; </script>

Cela me donne une variable de nombre vide. Comment puis-je obtenir le même nombre que la liste de tests en python?

10
knk
  1. Lorsque vous insérez une variable dans le modèle {{ test }}, il prend une représentation d'objet. Pour la liste de int [1,2,3,4,5,6], il sera rendu sous la forme [1, 2, 3, 4, 5, 6]; il s'agit donc d'un tableau javascript valide, mais cette méthode ne sécurise pas les objets complexes sans représentation javascript, par exemple, test = [1,2,3,4,5, any] sera rendu sous la forme [1, 2, 3, 4, 5, &lt;built-in function any&gt;]; toutefois, ce n'est qu'un exemple et ne fonctionnera jamais.

  2. Pour transtyper implicitement un objet javascript dans une fiole, existez tojson filter:

    <script> var counts = {{ test|tojson }}; </script>
    

    Ainsi, si l'objet est sérialisable JSON, tout sera rendu, sinon le moteur de modèle déclenchera une exception.

  3. Vous pouvez également envoyer du code javascript à votre modèle:

    from flask import json
    return render_template("sample.html",test=json.dumps(test))
    

    mais ce n'est pas une bonne approche et il vaut mieux utiliser le filtre tojson qui est également sûr pour le balisage HTML.

  4. Je préfère ne pas mélanger de code javascript dans les modèles et séparer les modèles, les données javascript et javascript avec ajax. Si cette approche est difficile, je préférerais utiliser le filtre tojson.

18
tbicr

Vous utilisez json.dumps dans la vue des flacons et JSON.parse dans le code javascript.

Dans la vue python:

def showpage():
    ...
    test = [1,2,3,4,5,6]
    test = json.dumps(test)
    return render_template("sample.html",test=test)

Dans le code JavaScript:

<script> var counts = JSON.parse("{{ test }}"); </script>
7
shaktimaan

Vous pouvez aussi utiliser 

{{ test|safe }} 

ou 

{{ test|tojson|safe }}

Le filtre safe doit être utilisé dans les balises de script.

3
ziggerman

Vous essayez de retourner dictionnaire depuis votre fonction showpage python comme suit et cela fonctionnera:

def showpage():
    """Your logic for getting the list to return """
    test_dict = {"data_list": [1,2,3,4,5]}
    return render_template("sample.html", test=test_dict)
0
Snehal Parmar