1

可能重复:
如何在 django 模板中创建计数器循环?

我想根据某些条件打印一些数据,

我想像使用其他语言一样使用它:

for(i=1;i<=count;i++)
print i

为了在 django 中做到这一点,我写了

{% for i in count %}
<p>{{ i }}</p>
{% endfor %}

但它给了我一个错误'int'对象不可迭代。计数来自views.py,如果我单独打印计数而不是显示输出。

我想打印一些值,直到计数不为零,所以我怎么能在 django 中做到这一点。

还有一件事我们可以在 django 中使用 while 循环,因为我也尝试将它用于此任务,但它给了我无效块标签的错误:'while'

所以请让我知道我该怎么做这个任务?

谢谢

在我的 view.py 中编辑 我曾经这样使用过

count=Product_attributes.objects.count()

然后将此计数传递给我的模板

4

3 回答 3

1

Django 模板不是编程语言。在视图或模型中编写所有逻辑,并将数据传递到模板中:

def view(request):
    values = []
    for i in range(10):
         values.append(i) # your custom logic here
    return render_to_response("/path/to/template", {'values': values})

在模板中:

{% for value in values %}
    <p>{{ value }}</p>
{% endfor %}
于 2012-10-10T10:00:32.517 回答
1

“for i in var”语法仅适用于“var”是可迭代的情况,例如列表、元组、集合、字典...

我建议如下:不要将项目计数传递给模板,而是传入可迭代的例如列表。如果你只有一个计数,你可以在视图中使用 range(count) 创建一个迭代。在代码中

# Extract from view
def view(request):
    # Set up values. Values is a list / tuple / set of whatever you are counting
    values = Product_attributes.objects.all()
    return render_to_response("/path/to/template", {'values': values})

# Extract from template
{% for value in values %}
   <p>{{value}}</p>
{% endfor %}

“while”标签不是 django 中的有效内置标签。可以在此处查看有效的内置标签列表:https ://docs.djangoproject.com/en/dev/ref/templates/builtins/

这种做事方式不仅仅特定于模板:它在“常规python”中具有相似之处,其中迭代集合的规范方法是:

for item in iterable:
    # do something with the item
    pass

可以在此处找到有关执行 for 循环的“python 方式”的更多信息:http ://wiki.python.org/moin/ForLoop

于 2012-10-10T10:09:59.947 回答
0

如果不适合将范围添加到您的视图代码中(我不喜欢将纯模板类型的东西添加到我的视图中),我可能会创建一个范围过滤器:

@register.filter
def range(val):
    return range(val)

然后你会像这样使用它:

{% for i in count|range %}
<p>{{ i }}</p>
{% endfor %}

如果您不想为此编写任何 python 代码,还可以使用一个非常丑陋的 hack,它利用 Django 的中心(或 ljust 和 rjust)过滤器创建一个提供的值长度的字符串。你可以像这样使用它:

{% for x in count|center:count %}
<p>{{ forloop.counter }}</p>
{% endfor %}

不过,我不建议这样做,我只是在证明这是可能的。

于 2012-10-10T12:49:45.783 回答