Как преобразовать th-функцию в декоратор в Django?

У меня есть fucntion header, значения которого я должен поместить в 3 urls, я не хочу запрашивать значения в каждом представлении и выводить контекст, потому что это занимает несколько строк.
Как я могу сделать декоратор?

def acc_profile(request):
    refferals, balance= header(request)
    context = {'refferals':refferals,'balance':balance}
    return render(request, 'accounts/profile.html')

def header(request):
    user_id = request.user.id
    refferals = Customer.objects.filter(name_id=user_id).values("refferals").first())['refferals']
    balance = Customer.objects.filter(name_id=user_id).values("nickname").first())['nickname']

Как я могу сделать def header в декоратор и в верхнем def acc_profile просто поставить @header для примера

Вы можете создать декоратор следующим образом

def acc_profile(request, referrals,balance):
    context = {'refferals':refferals,'balance':balance}
    return render(request, 'accounts/profile.html')

def header(func):
  def fun(request, *args, **kwargs):
    user_id = request.user.id
    refferals = Customer.objects.filter(name_id=user_id).values("refferals").first())['refferals']
    balance = Customer.objects.filter(name_id=user_id).values("nickname").first())['nickname']
    return func(request, referrals, balance,*args,**kwargs)
  return fun

Также, если вы не хотите передавать рефералов и баланс в функцию, то вам нужно где-то их хранить. По моему мнению, мы можем хранить их в request.session

Вернуться на верх