Как предоставить контекст методу get представления класса django
У меня есть представление, основанное на классе, которому я хочу предоставить некоторый контекст, но я не знаю, как этого добиться. Ниже представлен views.py
class Dashboard(LoginRequiredMixin, View):
def get(self, request):
if request.user is not None and len(request.user.payment_set.all()):
if request.user.is_active and request.user.payment_set.first().active:
print(eligible_to_review(self.request))
return render(request, 'main.html')
else:
return redirect('home')
else:
return redirect('membership')
Как я могу передать контекст этому представлению, чтобы использовать его в html-файле
Я думаю, что самый чистый способ - это заменить наследование от View на TemplateView - вы можете предоставить метод get_context_data для выполнения любых дополнительных контекстных вещей, которые вам нужны.
Идеально вам не нужно предоставлять get(), но поскольку у вас там есть некоторая дополнительная логика с перенаправлениями, вам, вероятно, это нужно. Я бы предположил, что вы, вероятно, хотите, чтобы eligible_to_review() находился в get_context_data, поскольку неясно, зачем вам его выводить (на какой терминал?). Также, учитывая использование LoginRequiredMixin, вы можете быть уверены, что когда вы доберетесь до get(), request.user будет установлен и активен - так что эти части тестов являются редуцированными.
class Dashboard(LoginRequiredMixin, TemplateView):
template_name="main.html"
def get_context_data(self, **kwargs):
context=super().get_context_data(**kwargs)
context["whatever"]="Some stuff" # This is where you add extra context you need.
return context
def def get(self, request, *args, **kwargs):
if len(request.user.payment_set.all()): #request.user is definitely set here!
if request.user.payment_set.first().active: #request.user is also active!
print(eligible_to_review(self.request))
return super().def get(request, *args, **kwargs)
else:
return redirect('home')
else:
return redirect('membership')