Django 为什么这个简单的条件视图代码不起作用?
型号: 视图:Django 为什么这个简单的条件视图代码不起作用?,django,django-views,Django,Django Views,型号: 视图: 有人能告诉我为什么在我未登录的情况下,即使我试图查看的建筑的内部状态为1,该代码也会让我使用404吗?很抱歉发布这么简单的问题,但我看不出有什么问题。内部状态的类型是字符串,而不是整数 试试这个: if request.user.is_staff is False and building.internal_state is not 1: raise Http404 else: pass 内部状态的类型是字符串,而不是整数 试试这个: if request.us
有人能告诉我为什么在我未登录的情况下,即使我试图查看的建筑的内部状态为1,该代码也会让我使用404吗?很抱歉发布这么简单的问题,但我看不出有什么问题。内部状态的类型是字符串,而不是整数 试试这个:
if request.user.is_staff is False and building.internal_state is not 1:
raise Http404
else:
pass
内部状态的类型是字符串,而不是整数 试试这个:
if request.user.is_staff is False and building.internal_state is not 1:
raise Http404
else:
pass
与“is”运算符相比,即使使用整数,也可能是危险的。在CPython realization中,您可以检查是否键入:
if not request.user.is_staff and building.internal_state != '1':
raise Http404
else:
pass
但如果您键入以下内容:
a = 1
b = 1
a is b
#True
事实上,“is”运算符比较的不是值,而是内存中的地址
这是我的50美分。与“is”运算符相比,即使使用整数也可能很危险。在CPython realization中,您可以检查是否键入:
if not request.user.is_staff and building.internal_state != '1':
raise Http404
else:
pass
但如果您键入以下内容:
a = 1
b = 1
a is b
#True
事实上,“is”运算符比较的不是值,而是内存中的地址
这是我的50美分。不要使用
is
进行字符串比较。你说得对,我只是用引号指向与asker相同的代码。我将编辑答案。不要使用is
进行字符串比较。你是对的,我只是用引号指向与asker相同的代码。我将编辑答案。请尽量避免为False
。如果不是request.user.is\u staff,最好使用。尽量避免为False
。如果不是request.user.is\u staff,最好使用。