所以如果我像这样使用函数视图:
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'),
但是,当我尝试使用基于类的视图时:
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在线查找类视图中返回上下文的简单案例,但无济于事。
请问我在这里有什么误解?
答案 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