【问题标题】:How to use Django json_script in a for loop如何在 for 循环中使用 Django json_script
【发布时间】:2022-10-23 19:28:51
【问题描述】:

假设我们在模板中有一个类似的表格

{% for object in object_list %}
   <tr>
      <td id="id-{{object.id}}">{{ object.id }}</td>
   </tr>
{% endfor %}

我正在考虑将object.id 用于事件,例如onclick,以确切知道使用了哪个object.id

如何在 JavaScript 脚本中使用json_script 获取object.id

【问题讨论】:

  • 你只想要ID?那为什么要使用json_script呢?您可以简单地为您的元素指定一个特定的类(以选择它们)并在数据属性中指定值。或者你想要一个ID列表?
  • 正如我所说,你有没有想过使用data attributes
  • json_script 最终会为您提供诸如 &lt;script id="id-you-passed" type="application/json"&gt;1&lt;/script&gt; 之类的东西,等等,对于像您这样的(重复的)单一属性数据,它是笨拙/矫枉过正的,您元素上的属性更适合您的情况。去json_script,以防你有一个合适的集合(列表/字典等)你想传递给JavaScript。

标签: javascript python django django-templates


【解决方案1】:

在问题的情况下,我们有一个表格,我们希望有一个按钮来复制 object.id 以在 JavaScript 中使用。

有多种方法可以做到这一点,json_script 不是其中之一。

正如Abdul Aziz Barkat 所指出的那样

json_script 最终会给你诸如&lt;script id="id-you-passed" type="application/json"&gt;1&lt;/script&gt; 之类的东西,等等,对于像你这样的(重复的)单一属性数据,它是笨拙/矫枉过正的,你元素上的一个属性更适合你的情况。如果你有一个适当的集合(列表/字典等)要传递给 JavaScript,请使用 json_script。

相反,我们可以在按钮中做这样的事情

  • onclick="copyId('{{object.id}}')"
  • id="js-copy-id-btn-{{object.id}}"
<table>
  <thead>
    <tr>
      <th>ID</th>
      <th></th>
    </tr>
  </thead>
  <tbody>
      {% for object in object_list %}
      <tr>
          <td>{{object.id}}</td>
          <td><button id="js-copy-id-btn-{{object.id}}" onclick="copyId('{{object.id}}')">Copy ID</button></td>
      </tr>
      {% endfor %}
  </tbody>
</table>

然后 JavaScript 可能看起来像

<script>
  function copyId(id) {
    // ...
}
</script>

在 Django 模板中将数据传递给 JavaScript 的另一种解决方案是使用 data attributes,如 suggested by Adam Johnson

{% for object in object_list %}
   <tr>
      <td data-obj-id={{object.id}} class="obj">{{ object.id }}</td>
   </tr>
{% endfor %}


<script>
    const objs = document.querySelectorAll(".obj")
    objs.forEach(obj => {
        let id = obj.dataset.objId
        obj.addEventListener('click', function(event) {
          // Whatever you have to do with the id on click
        })
    })
</script>

【讨论】:

  • 嗨 theeomm 感谢您抽出宝贵时间回答!我仍然想要json_script。您可以展示为什么您当前使用的方法更好
  • 前几天我读了一篇关于这个的文章。对于您的用例,似乎使用数据集是您想要完成的更容易和更清洁的解决方案。顺便说一句,我不是这个错误的专家,无法确定为什么一种方法比另一种更好。文章链接->adamj.eu/tech/2022/10/06/…
  • 我也引用了这个答案here,因为观察到一些开发人员可能会认为json_script 在我们想要将数据从 Django 模板传递到 JavaScript 时一直使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 2013-10-26
  • 2022-01-25
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多