Django模板值传递给Javascript

时间:2018-03-15 20:11:37

标签: javascript jquery ajax django django-templates

我正在开发一款回合制游戏,玩家可以(但不必)获得游戏板上某些空间的所有权。我的详细视图显示了每个玩家拥有的空间,我使用循环显示所有拥有的空间:

<small class="text-muted">Spaces Owned</small>
  <div class="list-group list-group-flush">
    {% for space in player.space_set.all %}
      <a class="list-group-item" data-toggle="modal" data-target="#spaceModal" id="modalButton">
       {{ space.name }}
      </a>
    {% endfor %}
  </div>

我希望能够填充一个模态,其中包含有关单击任何空间的所有详细信息(因此我为什么使用锚标记而不是div,尽管我猜它可能并不重要)。模态看起来像这样,虽然目标是使用适当的ID等来填充它,使用来自AJAX调用的响应而不是当前用作占位符的模板变量:

<div class="modal fade" id="spaceModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-body">
        <div class="wrapper">
          <div class="box">
            <h2>{{ space.name }}</h2>
            <div class="float-left">{{ space.location }}</div>
            <div class="float-right">{{ space.defense_points }}</div>
            <br />
            <div class="float-right">{{ space.attack_points }}</div>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

我希望能够做的是使用AJAX调用来填充每个空格的模态。我有服务器端功能设置正常,它正确返回我处理一个简单的get请求时所需的JSON(我正在使用以下url模式):

from django.urls import path
urlpatterns = [
    path('<int:game>/space_data/<int:space>', get_space_data, name = 'get_space_data'),
]

我的views.py定义为:

def get_space_data(request,game,space):
    game = Game.objects.get(pk=game)
    space = game.space_set.get(location=space)
    data = {
        'name': space.name,
        'location': space.location,
        'defense_points': space.defense,
        'attack_points': space.attack,
    }
    return JsonResponse(data)

现在我用来测试用法的JS如下:

<script>
  $("#modalButton").click(function(){
    var space = "{{ space }}"
    console.log(space)
    alert('Modal Button Clicked')
  })
</script>

摘要

基本上我想要做的就是将无法弄清楚怎么做,将空间变量传递给JS代码,这样我就可以在最后一个脚本代码中构建适当的AJAX调用。

2 个答案:

答案 0 :(得分:0)

要了解Daniel写的内容,我问的是如何将Django模板数据传递给JQuery脚本,然后我将在AJAX调用中使用它。我想出来了,并且会在这里发布我的答案,而不是仅删除问题。

模态弹出式锚标记应如下所示:

<small class="text-muted">Spaces Owned</small>
  <div class="list-group list-group-flush">
    {% for space in player.space_set.all %}
      <a class="list-group-item" data-toggle="modal" data-target="#spaceModal" id="modalButton" data-location="{{ space.location }}">
       {{ space.name }}
      </a>
    {% endfor %}
  </div>

,生成的JQuery代码如下:

<script>
  $("#modalButton").click(function(){
    console.log($(this).data('location'))
    alert('Modal Button Clicked')
  })
</script>

由此我将能够向脚本添加实际的AJAX调用并根据需要提取数据。

答案 1 :(得分:0)

以这种方式将变量发送到js以在ajax中使用它们

{% block scripts %}
    <script>
     var name  = {{space.name}}
     var location = {{space.location}}
    </script>
   <!-- JS Template -->
   <script src="{% static 'folder/name.js' %}"></script>

{% endblock scripts %}

和你的js

$.ajax({

       url: url,
       method: "",
       data: {

         "name" : name,
         "location":location

       },
       success: function (_response) {


       },
)