Django视图if语句不使用布尔值

2024-09-28 05:26:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我的if语句总是指向Else,即使布尔值改变了? 在Django工作1.6.5

在视图.py在

def awaiting_email_confirmation(request):
    confirmed = EmailConfirmed.objects.get(user=request.user)
    print confirmed
    if confirmed is False:
        print "if"
        template = 'accounts/email_confirmation.html'
        context = {}
        return render(request, template, context)   
    else:
        print "else"
        return HttpResponseRedirect(reverse("dashboard"))

我的主机会打印出来

^{pr2}$

这是我的模型.py电子邮件确认

class EmailConfirmed(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    activation_key = models.CharField(max_length=200)
    confirmed = models.BooleanField(default=False)

    def __unicode__(self):
        return str(self.confirmed)

Tags: pyfalsereturnifmodelsemailrequestdef
2条回答

您的print语句显示True或{},因为您在str重写中返回布尔值的字符串表示形式。换句话说,您正在打印字符串“True”或“False”。实际的布尔字段confirmed是模型中的一个字段。您应该将if条件更改为:

if not confirmed.confirmed:
    ...

顺便说一句,当找不到EmailConfirmed对象时,使用get_object_or_404方法而不是get()返回404页,而不是服务器错误:

^{pr2}$

我改编了卡塔瓦兰和塞尔库克的代码。在

在视图.py公司名称:

from django.shortcuts import get_object_or_404

def awaiting_email_confirmation(request):
confirmed = get_object_or_404(EmailConfirmed, user=request.user)
if not confirmed.confirmed:
    template = 'accounts/email_confirmation.html'
    context = {}
    return render(request, template, context)
else:
    return HttpResponseRedirect(reverse("dashboard"))

这是我的测试用例。在

相关问题 更多 >

    热门问题