Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 为什么这个简单的条件视图代码不起作用?_Django_Django Views - Fatal编程技术网

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,最好使用