template from examples dirs bootstrap python django function variables django-templates

python - from - templates dirs django



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

Paso 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. Intenté establecer el valor de retorno de la función en una variable e iterar sobre la variable, pero parece que no hay manera de establecer una variable en una plantilla de Django.

¿Hay alguna forma normal de hacerlo?


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

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


Intenté establecer el valor de retorno de fuction a una variable e iterar sobre la variable, pero parece que no hay forma de establecer la variable en la plantilla de Django.

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


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

Inside index.html

<h3> Latest Songs </h3> {% include "song_player_list.html" with songs=latest_songs %}

Dentro de song_player_list.html

<ul> {% for song in songs %} <li> <div id=''songtile''> <a href=''/songs/download/{{song.id}}/''><i class=''fa fa-cloud-download''></i>&nbsp;Download</a> </div> </li> {% endfor %} </ul>


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


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

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


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 %>