列表 Class 视图没有 return HttpResponse

List Class View didn't return an HttpResponse

我一直试图获得一个基于class的列表视图来显示用户帐户(申请人)下的所有条目,但是在加载页面时出现以下错误:

视图 jobassessment.views.view 没有 return HttpResponse 对象。它 return 改为 None。

对我来说,URL 调度程序似乎不是 运行 正确的视图,但这是我的整个站点和工作评估应用程序的 URL 文件,我似乎无法找出错误。

站点 URL.py:

urlpatterns = [
    path('admin/', admin.site.urls, name="admin"),
    path('accounts/', include('django.contrib.auth.urls'), name="accounts"),
    path('applicant/', include('userprofile.urls'), name="applicant"),
    path('assessments/', include('jobassessment.urls')),
]

JobAssessment 应用的 URL.py:

from django.urls import path
from . import views

urlpatterns = [
    path("", views.AssessmentListView.as_view(), name="assessment"),
]

这是我的 ListView,名为:

class AssessmentListView(LoginRequiredMixin, generic.ListView):
    model = Assessment
    template_name ='assessments_index.html'
    paginate_by = 5
    def get(self, request, *args, **kwargs):
        # Ensure they have first created an Applicant Profile
        if not Applicant.objects.filter(user=self.request.user).exists():
            messages.info(request, "You must create a profile before you can view any assessments.")
            return redirect('profile_create_form') 

    def get_queryset(self):
        return Assessment.objects.all().filter(applicant=Applicant.objects.filter(user=self.request.user)).order_by('-assessment_stage')

如果当前登录用户的申请人不存在那么你的if条件失败并且因为没有其他 部分在那里,因此视图中没有 HttpResponse returned。因此,如果申请人存在并且 return HttpResponse()

请添加其他部分
class AssessmentListView(LoginRequiredMixin, generic.ListView):
        model = Assessment
        template_name ='assessments_index.html'
        paginate_by = 5
        def get(self, request, *args, **kwargs):
            # Ensure they have first created an Applicant Profile
            if not Applicant.objects.filter(user=self.request.user).exists():
                messages.info(request, "You must create a profile before you can view any assessments.")
                return redirect('profile_create_form')
            else:
                return HttpResponse()  #<------ add corresponding HttpResponse if Applicant exists.

        def get_queryset(self):
            return Assessment.objects.all().filter(applicant=Applicant.objects.filter(user=self.request.user)).order_by('-assessment_stage')

按照 ListView filter 上的 django 文档,最好在 get_queryset 内处理它。所以对于你的情况,它会是这样的:

class AssessmentListView(LoginRequiredMixin, generic.ListView):
    model = Assessment
    template_name ='assessments_index.html'
    paginate_by = 5

    def get_queryset(self):
        # Ensure they have first created an Applicant Profile
        if not Applicant.objects.filter(user=self.request.user).exists():
            messages.info(request, "You must create a profile before you can view any assessments.")
            return redirect('profile_create_form') 
        else:
            return Assessment.objects.all().filter(applicant=Applicant.objects.filter(user=self.request.user)).order_by('-assessment_stage')