Django将Python对象从视图传递到模板中的Javascript脚本

Posted

技术标签:

【中文标题】Django将Python对象从视图传递到模板中的Javascript脚本【英文标题】:Django pass Python Object from view to Javascript script in template 【发布时间】: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; 【参考方案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 1和SO 2

【讨论】:

我该怎么做? document.write(player.name);如果我做 document.write(players);我看到了:["model":"game.game,"fields""name":"Bob", "win":3,"loose":2 ]

以上是关于Django将Python对象从视图传递到模板中的Javascript脚本的主要内容,如果未能解决你的问题,请参考以下文章

将对象从模板传递给 django 视图(控制器)

Django将对象从视图传递到下一个进行处理

Django同时将视图中的var传递给两个模板

无法将参数从模板传递到 Django 视图

将 request.user 传递给 Django 中的模板

Django - 将变量从函数视图传递到 html 模板