2011-02-16 9 views

Respuesta

49

El subsistema de plantilla tiene algunas construcciones especiales integradas en el bloque for/endfor que le permite acceder al índice actual del bucle sin tener que llamar al enumerate.

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

Aunque este fragmento resuelve su problema inmediato, si usted está esperando para tener acceso a las órdenes internas de Python Python y otras construcciones dentro de las plantillas de Django, es posible que la mala interpretación del recinto de seguridad que proporciona/hace cumplir.

+2

Para referencia: http://docs.djangoproject.com/en/dev/ref/templates/builtins/#for –

9

puede usar {{ forloop.counter }} o {{ forloop.counter0 }} para el mismo efecto, este último tiene 0 indexados, por lo tanto más como enumerate.

5

La plantilla de Django constituye la capa de presentación y no es lógica. Desde el docs

Si usted tiene un fondo en la programación, o si estás acostumbrado a las lenguas cuyo código de programación mezcla directamente en HTML, tendrá que tener en cuenta que el sistema de plantillas de Django no es simplemente Python incrustado en HTML. Esto es por diseño: el sistema de plantillas está destinado a expresar la presentación, no la lógica del programa.

Ahora, para obtener la misma funcionalidad en Django, tendrá que completar su lógica en las vistas.

views.py

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

Ahora enumerate función devuelve un objeto enumerate que es iterable.
my_template.html

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

Aunque creo que es probable que pueda cambiarlo a una lista enumerada y utilizarlo como eso también.

+0

Me gustó bastante esta idea a primera vista, pero cuando traté de usar esto en un 'formset' falló - dando error con el formulario de gestión. Esto probablemente podría superarse con más ajustes. – quapka

Cuestiones relacionadas