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

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

Но я нашел общий случай, который довольно раздражает, и либо у Django есть лучший способ сделать это, о котором я не думал, либо они должны чтобы увидеть здесь свет и немного переместить линию вычислений в шаблоне в ближайшем будущем выпуске (как они это делали, например, с параметрами оператора if):

У меня есть набор запросов элементов. Мне нужно как-то их отображать, но то, что я показываю, зависит не только от состояния объекта, но и от других независимых вещей (обычно от того, кто вошел в систему). Так что добавление функции к модели не поможет.

What I ' До сих пор мы превращали набор запросов в список или древовидную структуру (в зависимости от задачи) и добавляли атрибут "view_extra" к каждому из них. view_extra - это словарь, в котором я обычно использую значения, зависящие от таких вещей, как, например, кто вошел в систему. Помимо хлопот, он также устраняет ленивость набора запросов. Думаю, я мог бы зайти так далеко, чтобы создать генератор, но очевидно, что это не то, что разработчики Django намеревались сделать.

Я, вероятно, должен попробовать аннотацию набора запросов больше, но я не знаю, насколько хорошо это будет работать в более сложных случаях. Кроме того, ничего хорошего в сценарии структуры дерева или списка внутри списка (набор запросов элементов с членами, которые являются дополнительными наборами запросов, которые мне нужно перебрать).

Я мог бы зарегистрировать фильтр (как предлагается здесь шаблон django система вызов функции внутри модели ), но это злоупотребление фильтрами, верно? Они предназначены для преобразования текста и, возможно, данных, а не для конкретной замены того, чего разработчики намеренно пытались заставить нас не делать.

Любой «правильный» способ сделать это, о котором я не знаю? Могу ли я здесь ошибиться, предполагая, что это недостаток системы шаблонов Django в ее нынешнем виде?

5
задан Community 23 May 2017 в 11:45
поделиться