【问题标题】:Django pass Python Object from view to Javascript script in templateDjango将Python对象从视图传递到模板中的Javascript脚本
【发布时间】:2017-05-04 00:27:03
【问题描述】:

这是一个仅用于显示问题的简单代码, 显然,这个简单的代码试图做的任务可以在没有 Javascript 的情况下完成,但我需要知道如何使用 Javascript 来完成这项工作,因为 在我的真实代码中,我需要它,没有 Javascript 就无法完成 (基本上我用视图中的信息创建了一个动态二维数组)

在 view.py 中

在 def play_game 函数中

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

在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)

在 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>

【问题讨论】:

  • 我正在使用python3
  • 所以您想在模板中将players 转换为json?
  • 我不知道那是什么意思。我想在脚本中有对象播放器并像 python 对象一样使用它。示例:
  • 我想做,var play = player.win + player.loose;

标签: javascript python json django django-templates


【解决方案1】:

你需要serialize你的数据(玩家)。

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

在你的模板/脚本中

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

SO 1SO 2

【讨论】:

  • 我该怎么做? document.write(player.name);如果我做 document.write(players);我看到了:[{"model":"game.game,"fields"{"name":"Bob", "win":3,"loose":2} }]
猜你喜欢
  • 2017-04-26
  • 2016-09-28
  • 2014-11-28
  • 2013-04-10
  • 2015-09-18
  • 2015-07-07
  • 2018-02-10
  • 2014-08-28
  • 2021-02-03
相关资源
最近更新 更多