我想根据某些条件打印一些数据,
我想像使用其他语言一样使用它:
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()
然后将此计数传递给我的模板
答案 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 %}
我不建议这样做,我只是在证明这是可能的。