Как преобразовать 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