2009-04-05 22 views
13

Déjame incondicional por que estoy empezando Python así que si esto es realmente una cuestión sencilla^_^plantilla de Django - Nueva declaración de variables

Tengo un archivo html con el siguiente contenido:

 {%for d in results%} 
     <div class="twt"> 
      <img src="{{ d.profile_image_url }}" width="48px" height="48px" /> <span> {{ d.text }} </span> 
      <span class="date">{{ d.created_at }}</span> 
     </div> 
    {% endfor %} 

que funciona bien, pero también me gustaría declarar una variable en esta página. Digamos para este ejemplo, podemos RowNumber que se incrementará para cada d mostrado, escupiendo el RowNumber actual.

He intentado hacer:

{{ RowNumber = 0}} 
{{ RowNumber ++ }} 

Pero no parece que me permita declarar RowNumber.

+0

título debe ser 'Django Template' lugar. – muhuk

Respuesta

20

Compruebe documentation en el lazo for.

Crea automáticamente una variable llamada forloop.counter que contiene el índice de iteración actual.

En cuanto a la gran pregunta sobre cómo declarar las variables, no hay una forma inmediata de hacerlo con Django, y no se considera una característica que falta, sino una función. Si realmente deseaba hacer esto, es posible con custom tags, pero la filosofía que desea seguir es que la mayoría de las cosas que desea hacer requieren que esto se haga en la vista y la plantilla debe reservarse para muy simple lógica. Para su ejemplo de sumar un total, por ejemplo, podría usar el filtro add. Del mismo modo, puede create your own filters al igual que con las etiquetas.

+1

Gracias, ¿y si realmente necesito tener una nueva variable? por ejemplo, sumar los totales de ciertos parámetros ... – TimLeung

+0

Luego tendría que usar una etiqueta o filtro personalizado: el lenguaje de plantillas Django simplemente no le permite declarar nuevas variables. – mipadi

+0

El lenguaje de plantillas de Django se diseñó para evitar el estilo de codificación "en plantilla" de PHP, ASP, JSP, etc., por lo que este tipo de declaración, como han dicho Paolo y mipadi, se omite deliberadamente. El espíritu de las plantillas es que cualquier lógica de procesamiento, como la suma, debe hacerse en la función de vista. –

7

Si desea establecer cualquier variable dentro de una plantilla de Django, puede usar this small template tag I've written.

+0

Intenté esto y obtuve: TemplateSyntaxError: 'set_var' no es una biblioteca de etiquetas válida: biblioteca de plantillas set_var no encontrada, intentado google.appengine._internal.django.templatetags.set_var. – slashdottir

+0

parece que olvidó agregar su aplicación Django en "INSTALLED_APPS" dentro de settings.py –

2

En plantilla:

{% for outer_obj in outer_list %} 
    {% for inner_obj in inner_list %} 
     {% increment_counter forloop.counter0 forloop.parentloop.counter0 outer_list.count %} 
    {% endfor %} 
{% endfor %} 

Templatetag:

@register.simple_tag 
def increment_counter(outer, inner, outer_loop_length): 
    return outer + inner * outer_loop_length + inner * (outer_loop_length - 1) 

Resultado: 0 1 2 3 ...

Cuestiones relacionadas