Подтвердить что ты не робот

Как вызвать функцию, которая принимает аргумент в шаблоне Django?

Я передаю шаблону Django функцию, которая возвращает некоторые записи. Я хочу вызвать эту функцию и перебрать ее результат.

{% for item in my_func(10) %} 

Это не работает. Я попытался установить значение возвращаемой функции переменной и перебрать эту переменную, но, похоже, нет способа установить переменную в шаблоне Django.

Есть ли нормальный способ сделать это?

4b9b3361

Ответ 1

Вы не можете вызвать функцию, которая требует аргументов в шаблоне. Напишите тег шаблона или фильтр.

Ответ 2

Если у вас есть объект, вы можете определить его как @property, чтобы вы могли получать результаты без вызова, например.

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

затем в шаблоне:

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

Ответ 3

Я передаю шаблону Django функцию, которая возвращает мне некоторые записи

Почему бы вам не перейти к шаблону Django значение возвращаемой переменной, а не функцию?


Я попытался установить значение переменной fuction для переменной и перебрать переменную, но, похоже, не существует способа установить переменную в шаблоне Django.

Вы должны установить переменные в представлениях Django вместо шаблонов, а затем передать их в шаблон.

Ответ 4

По дизайну шаблоны Django не могут вызывать произвольный код Python. Это функция безопасности и безопасности для сред, где дизайнеры пишут шаблоны, а также предотвращает миграцию бизнес-логики в шаблоны.

Если вы хотите сделать это, вы можете переключиться на использование шаблонов Jinja2 (http://jinja.pocoo.org/docs/) или любую другую систему шаблонов, которая вам нравится поддерживает это. Шаблоны, которые вы используете, не будут затронуты ни одной другой частью django, поскольку это намеренно односторонний процесс. Вы даже можете использовать множество разных систем шаблонов в том же проекте, если хотите.

Ответ 5

Что вы можете сделать, создайте "функцию" в качестве другого файла шаблона, а затем включите этот файл, передающий ему параметры.

Внутри index.html

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

Внутри 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>