【问题标题】:Loop in Javascript using Django variable使用 Django 变量在 Javascript 中循环
【发布时间】:2016-07-06 08:46:19
【问题描述】:

我在 Django 视图中从数据库中获取我的表:

events = EventHistory.objects.all().order_by('-DT_NoAck')

我可以使用标签访问我的模板 (Html) 中的表格:

{% for event in events %} myvar : {{event.Message}} {% endfor%}

这行得通。我现在想做的是用 Javascript 做这个。

<script>
$(function() {
  var availableTags = [
    "ActionScript",
    "AppleScript",
    ...
    "Scala",
    "Scheme"
  ];
  for (event in {{events}}) {
      availableTags.push(event.Message)
      }
  $( "#tags" ).autocomplete({source: availableTags});
});
</script>

但它不起作用。存在语法错误和/或我的变量在 Javascript 中无法识别。

知道我做错了什么吗?

【问题讨论】:

  • 有一个快速的解决方案,您基本上使用 django for 循环在 javascript 中创建一个静态数组,但这不是一个很好的解决方案。您最好发出单独的 ajax 请求来检索 JsonResponse
  • 我对ajax或Json一无所知。你有一个简单的例子吗?
  • 此外,我无法从 Django 读取数组,在我找到好的语法之前,它会出现同样的问题。
  • 我终于得到了答案。可以使用与 HTML 中相同的标签 {% for event in events %} 是一个好方法吗? (有效)
  • 这就是我所说的快速解决方案,这是一个可行的解决方案,但还有更好的选择。

标签: javascript jquery django


【解决方案1】:

Javascript 对事件的结构一无所知。与其将 Django 模型实例发送到模板并期望 JS 知道如何处理它,不如发送一个包含您实际需要的值的 JSON 数组:

messages = EventHistory.objects.order_by('-DT_NoAck').values_list('Message', flat=True)
messages = json.dumps(list(messages))

JS:

availableTags.concat({{ messages|safe }})

【讨论】:

  • 这在 Django(第一行)中给我一个错误,我没有使用 json,我不知道它是如何工作的。
  • 告诉我错误是什么会更有帮助。尽管如此,我还是删除了一个额外的括号。
  • 错误消失了。但是我应该用javascript做什么?它不适合我。我在自动完成中看不到消息。
【解决方案2】:

我找到了解决方案:
在javascript中:

{% for event in events %}
    availableTags.push("{{event.Message}}")
{% endfor %}

它有效。
PS:我没有找到任何文档

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多