简体   繁体   中英

Django pass Python Object from view to Javascript script in template

This is a simple code created only to show the probem, obviusly the task that this simple code is trying to do can be done without Javascript, but I need to know how I can do this using Javascript, because In my real code I need it, and It cant't be done without Javascript (basically I create a dinamic 2D array with information from the view)

in view.py

in def play_game function

...
players = Player.objects.all()
context = {
    'players' : players
}
return render(request,'play_game.html', context)

in model.py

  class Player(models.Model):

    game = models.ForeignKey(Game, on_delete=models.CASCADE, blank=True, null=True)
    loose = models.IntegerField( default=0)
    win = models.IntegerField(default=0)
    name = models.CharField(max_length=9)

In play_game.html

 <script>
var players = "{{players}}";
for (player in players) {
    document.write(player.name);
    document.write("  Win:"+ player.win); 
    document.write("Loose: " + player.loose); 
};
</script>

You need to serialize your data (players).

from django.core import serializers
...
players = serializers.serialize("json", players)
...
return render(request, 'template.html', {'players': players, ...})

and in your template/script

<script>
var players = {{ players || safe }};
players.map(function (player) {
    document.write(player.name);
    document.write("  Win:"+ player.win); 
    document.write("Loose: " + player.loose); 
});
</script>

see SO 1 and SO 2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM