如何为django类视图get方法提供上下文

siv3szwd  于 2022-11-19  发布在  Go
关注(0)|答案(1)|浏览(152)

我有一个基于类的视图,我想提供一些上下文,但我不知道如何才能实现这一点下面是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文件中使用它

b1uwtaje

b1uwtaje1#

我认为最简洁的方法是用TemplateView替换从View继承的内容--您可以提供一个get_context_data方法来完成您需要的任何额外的上下文内容。
理想情况下,您不需要提供get()但是因为你在重定向中有一些额外的逻辑,所以你可能需要它。()在get_context_data中,因为不清楚为什么要打印它(到什么终端?)。同样,如果使用LoginRequiredMixin,您可以确信,当您到达get()request.user既已设置又处于活动状态-因此测试的这些部分是reducndant。

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 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().get(request, *args, **kwargs)
            else:
                return redirect('home')
        else:
            return redirect('membership')

相关问题