MoonLover
MoonLover

Reputation: 3

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>

Upvotes: 0

Views: 3535

Answers (1)

rwx
rwx

Reputation: 706

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

Upvotes: 2

Related Questions