django 视图 if 语句不适用于布尔值
django views if statement not working with a boolean
即使布尔值发生变化,我的 if 语句总是转到 Else?
在 Django 1.6.5 中工作
views.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"))
我的控制台会打印
True
else
False
else
这是我的 model.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)
您的 print
语句显示 True
或 False
,因为您 return 在 str
覆盖中使用布尔值的字符串表示形式。换句话说,您正在打印字符串 'True' 或 'False'。实际的布尔字段 confirmed
是模型中的一个字段。您应该将 if 条件更改为:
if not confirmed.confirmed:
...
顺便说一下,使用 get_object_or_404
方法而不是 get()
到 return 404 页面而不是服务器错误可能是更好的主意 EmailConfirmed
可以找到对象:
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:
...
我改编了 catavaran & Selcuk 的代码。
view.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"))
这正在处理我的测试用例。
即使布尔值发生变化,我的 if 语句总是转到 Else? 在 Django 1.6.5 中工作
views.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"))
我的控制台会打印
True
else
False
else
这是我的 model.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)
您的 print
语句显示 True
或 False
,因为您 return 在 str
覆盖中使用布尔值的字符串表示形式。换句话说,您正在打印字符串 'True' 或 'False'。实际的布尔字段 confirmed
是模型中的一个字段。您应该将 if 条件更改为:
if not confirmed.confirmed:
...
顺便说一下,使用 get_object_or_404
方法而不是 get()
到 return 404 页面而不是服务器错误可能是更好的主意 EmailConfirmed
可以找到对象:
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:
...
我改编了 catavaran & Selcuk 的代码。
view.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"))
这正在处理我的测试用例。