Django中的循环问题

时间:2012-10-10 09:55:11

标签: python django django-templates

  

可能重复:
  how to create counter loop in django template?

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

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

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

要在django中执行此操作,我写了

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

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

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

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

所以请告诉我如何完成这项任务?

由于

修改 在我的view.py我用过这样的

count=Product_attributes.objects.count()

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

3 个答案:

答案 0 :(得分: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 %}

答案 1 :(得分:1)

“for i in var”语法仅适用于“var”是可迭代的地方,例如list,tuple,set,dict ......

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

# 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 for循环的“python方式”的更多信息,请访问:http://wiki.python.org/moin/ForLoop

答案 2 :(得分: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 %}

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