视图login.views.IndexView未返回HttpResponse对象。它返回了None。
class IndexView(FormView):
form_class = NameForm
template_name = 'reg.html'
success_url='display'
def form_valid(self, form):
form.save()
return super().form_valid(form)
class DisplayView(generic.TemplateView):
template_name = 'view.html'
def dis(self,request):
st4=[]
st5=[]
ob=Register.objects.all()
for i in ob:
st4.append(i.name)
st5.append(i.rollno)
return render(request,'view.html',{'st4':st4,'st5':st5})
答案 0 :(得分:1)
您的form_valid
方法应该返回响应。对于FormView
,最简单的方法是调用super()
并返回。
def form_valid(self, form):
form.save()
return super(IndexView, self).form_valid(form)
在您的DisplayView
中,您已经编写了dis
方法,但您还没有编写实际调用它的任何代码。最简单的方法是使用基于函数的视图。
def dis(request):
st4=[]
st5=[]
ob=Register.objects.all()
for i in ob:
st4.append(i.name)
st5.append(i.rollno)
return render(request,'view.html',{'st4':st4,'st5':st5})
然后更改您的网址格式以使用views.dis
代替views.DisplayView.as_view()
。
如果您确实想使用TemplateView
,则可以覆盖get_context_data
并将st4
和st5
添加到上下文中。
class DisplayView(generic.TemplateView):
template_name = 'view.html'
def get_context_data(self, **kwargs):
context = super(DisplayView, self).get_context_data(**kwargs)
st4=[]
st5=[]
ob=Register.objects.all()
for i in ob:
st4.append(i.name)
st5.append(i.rollno)
context['st4'] = st4
context['st5'] = st5
return context
除非您熟悉基于类的视图,否则基于函数的视图更容易理解,所以我会坚持这一点。 TemplateView
不会自动优于基于函数的视图。
答案 1 :(得分:0)
class IndexView(FormView):
form_class = NameForm
template_name = 'reg.html'
success_url='display'
def form_valid(self, form):
form.save()
return super().form_valid(form)
def dis(request):
st4=[]
st5=[]
ob=Register.objects.all()
for i in ob:
st4.append(i.name)
st5.append(i.rollno)
return render(request,'view.html',{'st4':st4,'st5':st5})