1

重複の可能性:
djangoテンプレートでカウンターループを作成する方法は?

ある条件に基づいてデータを印刷したいのですが、

他の言語で使用したように使用したい:

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

djangoでこれを行うために私は書いた

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

しかし、それは私にエラーを与えます'int'オブジェクトは反復可能ではありません。カウントはviews.pyから来ており、カウントだけを出力すると、出力が表示されます。

countがゼロにならないまで値を出力したかったので、djangoでこれを行うにはどうすればよいですか。

そして、もう1つ、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

「foriinvar」構文は、「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コードを記述したくない場合に使用できる非常に醜いハックもあります。これは、提供された値の長さの文字列を作成するDjangoの中央(またはljustとrjust)フィルターを利用します。次のように使用できます。

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

ただし、この方法はお勧めしません。それが可能であることを示しているだけです。

于 2012-10-10T12:49:45.783 に答える