You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Django类视图的get方法提供上下文数据

Django类视图传递上下文到模板的实现方法

你使用的render()方法支持传入第三个参数为上下文字典,字典的键对应模板中使用的变量名,值对应要传递的数据。修改后的代码如下:

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:
                # 定义上下文字典,按需添加要传递的字段
                context = {
                    "eligible_to_review": eligible_to_review(self.request),
                    "user": request.user,
                    "active_payment": request.user.payment_set.first()
                }
                # 将context作为第三个参数传入render
                return render(request, 'main.html', context)
            else:
                return redirect('home')
        else:
            return redirect('membership')

小提示:你引入的LoginRequiredMixin已经会自动拦截未登录用户,所以request.user is not None的判断可以省略,简化代码逻辑。

传递完成后,你可以在main.html中直接通过变量名调用对应数据,示例如下:

<!-- 直接渲染变量 -->
<p>欢迎你,{{ user.username }}</p>
<!-- 结合模板标签做判断 -->
{% if eligible_to_review %}
    <a href="/review/">前往审核页面</a>
{% endif %}

如果你需要在多个方法中复用上下文逻辑,也可以单独抽离上下文构造方法:

class Dashboard(LoginRequiredMixin, View):
    def get_context(self, request):
        context = {}
        context["eligible_to_review"] = eligible_to_review(request)
        context["user"] = request.user
        context["active_payment"] = request.user.payment_set.first()
        # 所有公共上下文都可以在此处统一添加
        return context

    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:
                context = self.get_context(request)
                return render(request, 'main.html', context)
            else:
                return redirect('home')
        else:
            return redirect('membership')

如果你后续使用TemplateView等通用类视图,直接重写内置的get_context_data()方法即可实现上下文注入,逻辑和上述抽离方法一致。

内容的提问来源于stack exchange,提问作者Sammy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:09:01