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

zjm*_*126 50 python django templates

这是我的代码:

{% for i,j in enumerate(a) %}
    {{i}} ,{{j}}
{% endfor%}
Run Code Online (Sandbox Code Playgroud)

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

那么如何运行enumerate django模板,

谢谢

Joe*_*way 70

模板子系统在for/endfor块中内置了一些特殊结构,允许您访问循环的当前索引而无需调用enumerate.

{% for j in a %}
    {{ forloop.counter0 }}, {{ j }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

虽然这个片段解决了您的直接问题,但如果您希望能够访问Django模板中的Python内置函数和其他Python构造,那么您可能会误解它提供/强制执行的沙箱.

  • 另外,对于每个人的快速参考:`forloop.counter0`指的是0索引计数器,而'forloop.counter`指的是1索引计数器 (5认同)
  • 供参考:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#for (2认同)

Uku*_*kit 12

你可以使用{{ forloop.counter }}或者使用{{ forloop.counter0 }}相同的效果,后者是0索引,因此更像enumerate.


raz*_*tia 8

{% for item in a %}
    {{ forloop.counter }}, {{ item }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

链接相关


vab*_*man 5

Django模板构成表示层,不适用于逻辑.来自文档

如果您有编程背景,或者习惯于将编程代码直接混合到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 }..)
Run Code Online (Sandbox Code Playgroud)

now enumerate函数返回一个可迭代的枚举对象.
my_template.html

{% for index, item in enumerated_a %}
    {{ index }},{{ item }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

虽然我认为您可以将其更改为枚举列表并使用它.