2013-07-01 115 views
1

如何使用不断变化的INDEX访问或迭代javascript内的django列表。在JavaScript中迭代Django模板变量,通过变化索引访问

例如:

<script> 
    for (var i=0; i < "{{ django_list|length }}".toInt(); i++) { 
     var e = "{{ django_list" + i.toString() + " }}"; // this gives an error 
     ... // it does not parse a chunked^template variable properly 
     ... 
    } 
</script> 

一些背景。这是一个纯粹的.js文件,由django呈现。该部分的工作原理,它只是不解释一个substringed出django模板VAR语法。

我更喜欢避免编码成JSON或类似的解决方案。模板形式是首选,因为我需要变量的方法。

谢谢。

+0

u能不能用for each循环? – Sohaib

+0

不是这个例子,JS正在控制迭代 –

回答

1

一如既往encode as JSON

{% load jsonify %} 

var data = {{ django_list|jsonify }}; 

for (...) { 
    ... 
} 
+0

啊,这就是我的代码当前的样子,但有什么办法可以避免编码?我需要模板中的METHODS模型,并将其编码为JSON意味着除字段之外的所有内容都将丢失。谢谢 –

+0

您不能在没有执行XHR的情况下从JavaScript访问Django代码。如果您实际上不需要代码,则根据您需要的数据创建一个列表或字典并对其进行编码。 –

+0

你可以调用方法,这已经足够好了。 {{some_model.some_function}}。并且将模型编码成JSON使得它失去了这个功能。 –

0

难道你不能使用每个循环?

{% for item in django_list %} 
//Whatever you wish to do with item goes here 
{% endfor %} 

更多请见链接 https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for-empty

+0

我只是想看看在这个例子中做了什么是可能的。好的建议虽然 –

+0

有些情况下我们需要索引。如果它是一个动态变化的全局索引的大JS文件呢?我们可以'在JS中只需要一个for循环,我们需要使用索引来访问列表。 –

+0

我不明白你。正如我在for循环中所说的那样,您始终可以使用forloop.counter来使用它来操纵您的项目。 我没有得到什么? – Sohaib