Как предоставить контекст методу 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')
Вернуться на верх