【问题标题】:How to fix Django's the view didn't return an HttpResponse object. It returned None instead?如何修复 Django 的视图没有返回 HttpResponse 对象。它返回 None 而不是?
【发布时间】:2017-12-18 07:06:43
【问题描述】:

我收到以下错误:

视图 KSUvity.authentication.views.registerAttendee 未返回 一个 HttpResponse 对象。它返回 None

我认为这是因为我的函数中存在逻辑错误。我有几个 if 和 else 语句来检查几个条件。

这是views.py中的函数:

def registerAttendee(request,pk):
    act = Activity.objects.get(pk=pk)
    act.save()
    attendee, _ = Attendee.objects.get_or_create(student=request.user)

    volunteer = Volunteer.objects.filter(student=request.user)

    ActvsStudentAttending=Activity.objects.filter(attendee=attendee)
    ActvsStudentVolunteering=Activity.objects.filter(volunteer=volunteer)

    if act.volunteer.filter(student=request.user).exists():
        messages.error(request, 'You\'re already registered as a volunteer for this activity!', extra_tags='alert')
        return redirect('home/#work')

    elif act.attendee.filter(student=request.user).exists():
        messages.warning(request, 'You\'re already registered as an attendee for this activity!', extra_tags='alert')
        return redirect('home/#work')

    elif ActvsStudentAttending.exists():
        for x in ActvsStudentAttending:
            if x.startDate.date() == act.startDate.date():
                messages.error(request, 'You\'re already registered in the '+x.title+' activity that is held on the same day as '+act.title+'!', extra_tags='alert')
                return redirect('home/#work')

    elif ActvsStudentVolunteering.exists():
        for x in ActvsStudentVolunteering:
            if x.startDate.date() == act.startDate.date():
                messages.error(request, 'You\'re already registered in the '+x.title+' activity that is held on the same day as '+act.title+'!', extra_tags='alert')
                return redirect('home/#work')
    else:
        act.attendee.add(attendee)
        messages.success(request, 'You\'re successfully registered as an attendee!', extra_tags='alert')
        return redirect('home/#work')

是因为for循环内部的内部if而引发的错误吗?如果是,我应该如何解决?对于这些情况,我没有 else ,所以我不知道我在这里缺少什么。在将其添加到模型中的最终 else 之前,我必须检查所有条件。

我是 Django 和 Python 的新手,请见谅。

这就是我在 models.py 中的内容:

class Activity(models.Model):
    type = models.CharField(max_length=50, default="")
    title = models.CharField(max_length=200, default="")
    description = models.CharField(max_length=500)
    owner = models.ForeignKey(User, related_name="owner")
    college = models.CharField(max_length=200)
    location = models.CharField(max_length=200)
    room = models.CharField(max_length=200)
    startDate = models.DateTimeField(null=True, blank=True)
    endDate = models.DateTimeField(null=True, blank=True)
    attendee = models.ManyToManyField(Attendee, related_name="attendees",null=True, blank=True)
    volunteer = models.ManyToManyField(Volunteer, related_name="volunteers",null=True, blank=True)

class Attendee(models.Model):
    student = models.ForeignKey(User, related_name="attendee")

class Volunteer(models.Model):
    student = models.ForeignKey(User, related_name="volunteer")

【问题讨论】:

    标签: python django


    【解决方案1】:

    删除else 并取消缩进它的代码块。这将确保如果您的代码进入较早的 elif 块之一但从未在循环中传递内部 if 条件,则始终执行这部分代码:

    if ...:
        # ...
    elif ...:
        # ...
    # remove the 'else', so that this will always run if your view function 
    # did not return from any of the earlier '[el]if' blocks
    act.attendee.add(attendee)
    messages.success(request, 'You\'re successfully registered as an attendee!', extra_tags='alert')
    return redirect('home/#work')
    

    【讨论】:

      猜你喜欢
      • 2017-01-25
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2015-06-26
      • 1970-01-01
      • 2017-12-28
      相关资源
      最近更新 更多