Как вызвать функцию, которая принимает аргумент в шаблоне Django? - PullRequest
46 голосов
/ 18 марта 2010

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

{% for item in my_func(10) %} 

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

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

Ответы [ 5 ]

59 голосов
/ 18 марта 2010

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

19 голосов
/ 03 февраля 2014

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

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

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

<% for result in item.results %>
...
<% endfor %>
10 голосов
/ 26 марта 2010

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

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


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

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

5 голосов
/ 28 июля 2013

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

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

1 голос
/ 17 января 2015

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

Внутри 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...