如何在django模板中运行此代码

时间:2011-02-16 06:53:47

标签: python django templates

这是我的代码:

{% for i,j in enumerate(a) %}
    {{i}} ,{{j}}
{% endfor%}

但是,它显示错误,我认为它无法运行enumerate方法,

所以如何在django模板中运行enumerate

感谢

5 个答案:

答案 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 %}

Link related

答案 4 :(得分:0)

但是,如果您需要在模板中使用某个功能,我建议您创建一个过滤器或标签。如需参考,请查看http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/