view.html页面

时间:2018-04-27 09:50:18

标签: django

视图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})

2 个答案:

答案 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并将st4st5添加到上下文中。

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})