Я понимаю, что в Django язык шаблонов специально кастрирован для предотвращения слишком большого количества вычислений в коде дисплея.Это означает, что в идеале для каждой ситуации, когда пользователи могут чувствовать необходимость выполнять вычисления, есть более подходящая альтернатива.Либо тег, либо фильтр, который делает свое дело, либо что-то, надеюсь, прямо в представлении.Надеюсь, что любые неприятности, которые здесь не вписываются, редки.
Но я нашел общий случай, который довольно раздражает, и у Django есть лучший способ сделать это, о котором я даже не думал,или они должны увидеть свет здесь и немного сдвинуть строку с вычислениями в шаблоне в ближайшем будущем выпуске (как, например, с параметрами оператора if):
У меня есть набор запросов элементов,Мне нужно как-то их отображать, но то, что я показываю, зависит не только от состояния объекта, но и от других независимых вещей (обычно от того, кто вошел в систему).Поэтому добавление функции в модель не поможет.
То, что я делал до сих пор, - это превращение набора запросов в список или древовидную структуру (в зависимости от задачи) и добавление атрибута view_extra.каждому.view_extra - это словарь, в котором я обычно придерживаюсь значений, которые зависят от таких вещей, как то, кто вошел в систему. Помимо проблем, он также уничтожает лень набора запросов.Я думаю, я мог бы пойти так далеко, чтобы сделать генератор, но, очевидно, это не то, что разработчики Django намеревались сделать для нас.
Я, вероятно, должен попробовать больше аннотации наборов запросов, но я не знаюнасколько хорошо это будет работать в некоторых более сложных случаях.Кроме того, ничего хорошего в сценарии структуры дерева или списка в списке (набор запросов элементов с элементами, которые являются дополнительными наборами запросов, мне нужно выполнить итерацию).
Я мог бы зарегистрировать фильтр (как предложено здесь система шаблонов django, вызывающая функцию внутри модели ), но это злоупотребление фильтрами, верно?Они предназначены для преобразования текста и, возможно, данных, а не для того, чтобы заменить собой то, что разработчики сознательно пытались заставить нас не делать.
Любой «правильный» способ сделать это, что я не делаюзнать о?Неужели я не согласен с предположением, что это недостаток системы шаблонов Джанго в ее нынешнем виде?