Шаблон Django: как использовать values / values_list

#django #django-templates

#django #django-шаблоны

Вопрос:

В шаблоне я пытаюсь сделать что-то вроде этого:

 {{ request.user.profile.following.all.values_list }}
  

и я получаю

<Набор запросов [(7, 2, 1)]>

, но я хочу получить

<Набор запросов [2]>

как в Django values_list. Например: Follow.objects.filter(follow_by=self.request.user.profile).values_list('follow_to', flat=True) могу ли я передать такой аргумент в шаблоне?

Комментарии:

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

Ответ №1:

Могу ли я передать такой аргумент в шаблоне?

Нет. Механизм шаблонов Django намеренно ограничивает это, поскольку это логика, которая принадлежит представлению. Например:

 from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    following = request.user.profile.following.values_list('follow_to', flat=True)
    return render(
        request,
        'some_template.html',
        {'following': following}
    )  

Затем вы можете отобразить это с помощью:

 {{ following }}  

При этом использование .values_list(…) [Django-doc] часто является антишаблоном, поскольку оно разрушает слой модели. Таким образом, это что-то связанное с примитивным антипаттером obsession [refactoring.guru].