这是我的代码:
{% for i,j in enumerate(a) %}
{{i}} ,{{j}}
{% endfor%}
但是,它显示错误,我认为它无法运行enumerate
方法,
所以如何在django模板中运行enumerate
,
感谢
答案 0 :(得分:64)
模板子系统在for / endfor块中内置了一些特殊结构,允许您访问循环的当前索引而无需调用enumerate
。
{% for j in a %}
{{ forloop.counter0 }}, {{ j }}
{% endfor %}
虽然这个片段解决了您的直接问题,但如果您希望能够访问Django模板中的Python内置函数和其他Python构造,那么您可能会误解它提供/强制执行的沙箱。
答案 1 :(得分:12)
您可以使用{{ forloop.counter }}
或{{ forloop.counter0 }}
获得相同的效果,后者为0索引,因此更像enumerate
。
答案 2 :(得分:5)
Django模板构成表示层,不适用于逻辑。来自docs
如果您有编程背景,或者习惯于将编程代码直接混合到HTML中的语言,那么您需要记住,Django模板系统不仅仅是嵌入到HTML中的Python。这是设计的:模板系统用于表达表示,而不是程序逻辑。
现在要在Django中获得相同的功能,你必须在视图中完成你的逻辑。
views.py
def my_view(request, ...):
....
enumerated_a = enumerate(a);
....
return render_to_response('my_template.html', {'enumerated_a ': enumerated_a }..)
现在enumerate
函数返回一个可迭代的枚举对象
my_template.html
{% for index, item in enumerated_a %}
{{ index }},{{ item }}
{% endfor %}
虽然我认为您可以将其更改为枚举列表并同样使用它。
答案 3 :(得分:2)
{% for item in a %}
{{ forloop.counter }}, {{ item }}
{% endfor %}
答案 4 :(得分:0)
但是,如果您需要在模板中使用某个功能,我建议您创建一个过滤器或标签。如需参考,请查看http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/