web-dev-qa-db-ja.com

このコードをDjangoテンプレートで実行する方法

これは私のコードです:

{% for i,j in enumerate(a) %}
    {{i}} ,{{j}}
{% endfor%}

しかし、エラーが表示されます。enumerateメソッドを実行できないと思います。

では、Djangoテンプレートでenumerateを実行する方法、

ありがとう

51
zjm1126

テンプレートサブシステムには、for/endforブロックに組み込まれたいくつかの特別な構成要素があり、enumerateを呼び出さなくてもループの現在のインデックスにアクセスできます。

{% for j in a %}
    {{ forloop.counter0 }}, {{ j }}
{% endfor %}

このスニペットは当面の問題を解決しますが、Pythonビルトインおよび他のPython内部のDjangoテンプレートの場合、サンドボックスが提供/適用するサンドボックスを誤解している可能性があります。

66
Joe Holloway

{{ forloop.counter }}または{{ forloop.counter0 }}同じ効果の場合、後者は0でインデックス付けされるため、enumerateに似ています。

12
Uku Loskit

Djangoテンプレートはプレゼンテーション層を構成し、ロジック用ではありません。 docs から

プログラミングのバックグラウンドがある場合、またはプログラミングコードを直接HTMLに混在させる言語に慣れている場合は、Djangoテンプレートシステムは単なる=ではないことに注意してください。 Python HTMLに埋め込まれています。これは設計によるものです。テンプレートシステムは、プレゼンテーションを表現するためのものであり、プログラムのロジックではありません。

Djangoで同じ機能を使用するには、ビューでロジックを完了する必要があります。

views.py

def my_view(request, ...):
    ....
    enumerated_a = enumerate(a);
    ....
    return render_to_response('my_template.html', {'enumerated_a ': enumerated_a }..)

現在、enumerate関数は、反復可能な列挙オブジェクトを返します。
my_template.html

{% for index, item in enumerated_a %}
    {{ index }},{{ item }}
{% endfor %}

おそらく列挙型リストに変更して、そのように使用することもできると思いますが。

5
vabhdman
{% for item in a %}
    {{ forloop.counter }}, {{ item }}
{% endfor %}

リンク関連

2
razpeitia

ただし、テンプレート内で関数を使用する必要がある場合は、代わりにフィルターまたはタグを作成することをお勧めします。参考までに、チェックアウト http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/

0
gladysbixly