从django中基于类的视图返回上下文

时间:2018-04-21 14:20:41

标签: python django django-views

所以如果我像这样使用函数视图:

def messageView(request):
    webpages_list = AccessRecord.objects.order_by('date')
    date_dict = {'access_records':webpages_list}
    return render(request,'index.html',context=date_dict)

我的网址解析器看起来像这样:path('', views.messageView , name='index'),

一切都很好,我的记录按预期显示: enter image description here

但是,当我尝试使用基于类的视图时:

class IndexView(CreateView):
    form_class = RegisterUserForm 
    template_name = "index.html"

    def index(self,request):
        webpages_list = AccessRecord.objects.order_by('date')
        date_dict = {'access_records':webpages_list}

        return render(request, self.template_name,context=date_dict )

并且网址如下:path('', views.IndexView.as_view(), name='index'),

在这种情况下,我什么都没得到,我已经尝试过在django在线查找类视图中返回上下文的简单案例,但无济于事。

请问我在这里有什么误解?

2 个答案:

答案 0 :(得分:2)

您可以覆盖get_context_data方法。

将它放在基于班级的视图中:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context['access_records'] = AccessRecord.objects.order_by('date')
    return context

它返回一个表示模板上下文的字典。

答案 1 :(得分:1)

如果您只是学习CBV,请从简单的View开始,而不是CreateView。这是从FBV迁移到CBV的最简单方法:

from django.views import View

class IndexView(View):

    def get(self, request):
        webpages_list = AccessRecord.objects.order_by('date')
        date_dict = {'access_records': webpages_list}
        return render(request, 'index.html', context=date_dict)

    def post(self, request):
        raise NotImplementedError