¿Cómo llamar a la función que toma un argumento en una plantilla de Django?

Estoy pasando a la plantilla de Django una función que devuelve algunos registros. Quiero llamar a esta función e iterar sobre su resultado.

{% for item in my_func(10) %} 

Eso no funciona. He intentado establecer el valor de retorno de la función en una variable e iterar sobre la variable, pero parece que no hay forma de establecer una variable en una plantilla de Django.

¿Hay alguna forma normal de hacerlo?

No puede llamar a una función que requiere argumentos en una plantilla. Escriba una etiqueta de plantilla o filtro en su lugar.

si tiene un objeto, puede definirlo como @property para que pueda obtener resultados sin una llamada, por ejemplo

 class Item: @property def results(self): return something 

luego en la plantilla:

 <% for result in item.results %> ... <% endfor %> 

Estoy pasando a la plantilla de Django una función, que me devuelve algunos registros

¿Por qué no le pasa a la plantilla de Django el valor de retorno de la función de almacenamiento de variables, en lugar de la función?

He intentado establecer el valor de retorno de fuction en una variable e iterar sobre la variable, pero parece que no hay manera de establecer la variable en la plantilla de Django.

Debería establecer variables en las vistas de Django en lugar de plantillas, y luego pasarlas a la plantilla.

Por diseño, las plantillas de Django no pueden llamar al código Python arbitrario. Esta es una característica de seguridad y protección para entornos donde los diseñadores escriben plantillas, y también evita la migración de la lógica empresarial a las plantillas.

Si desea hacer esto, puede cambiar a usar plantillas de Jinja2 ( http://jinja.pocoo.org/docs/ ), o cualquier otro sistema de plantillas que le guste y que lo admita. Ninguna otra parte de django se verá afectada por las plantillas que use, ya que es intencionalmente un proceso de una sola vía. Incluso podría usar muchos sistemas de plantillas diferentes en el mismo proyecto si quisiera.

Lo que podría hacer es crear la “función” como otro archivo de plantilla e incluir ese archivo que le pasa los parámetros.

Dentro de index.html

 

Latest Songs

{% include "song_player_list.html" with songs=latest_songs %}

Dentro de song_player_list.html