视图在Python3中不存在,但在Python2中存在
我的views.py中有以下代码:视图在Python3中不存在,但在Python2中存在,python,django,python-3.x,Python,Django,Python 3.x,我的views.py中有以下代码: def view1(request): # do view1-y things return view_common(request, mode=True) def view2(request): # do view2-y things return view_common(request, mode=False) # not registered in urls.py def view_common(request, mode):
def view1(request):
# do view1-y things
return view_common(request, mode=True)
def view2(request):
# do view2-y things
return view_common(request, mode=False)
# not registered in urls.py
def view_common(request, mode):
return render(...)
这在Python3下不起作用,导致“视图不存在”错误。如何解决这个问题?问题在于Python解释视图的方式 执行查看方法
view1
时,view\u common
仍不在上下文中。这就是问题所在。将助手方法移动到视图之前,使其处于上下文中。这将解决这个问题
下面是一个演示:
假设有一个python文件,test.py
:
x = add_three(2, 3, 4)
print (x)
def add_three(x, y, z):
return plus(plus(x, y), z)
def plus(x, y):
return x + y
输出:
$:~$ python3 test.py
Traceback (most recent call last):
File "test1.py", line 1, in <module>
x = add_three(2, 3, 4)
NameError: name 'add_three' is not defined
输出与预期一致。请注意,
plus
在从add\u three
调用时已经在上下文中。因此它不会失败。请发布回溯。您是否尝试将view\u common
移到view1
上方?@karthikr:这很有帮助,谢谢。把它作为答案贴出来,我会接受的。你的问题毫无意义。发布的代码在3.5中运行良好。对于此代码,该错误消息可能不是来自Python的。代码中没有名称视图
。请参阅。方法是作为类属性的函数<代码>视图1等是函数,但不是方法。发布的代码从不调用任何函数,并且在3.x中运行良好,因此没有显示错误进行解释。函数在调用之前必须存在或定义这一事实在2.x和3.x之间没有变化。“当执行视图方法view1时,视图公共项仍然不在上下文中。”除非在def view\u common()
之前的模块级执行视图,否则这一事实毫无意义。另外,x=add_three(…)
也会以同样的原因失败,但这并不是因为未定义的plus
。您是否了解为什么它在Python 2而不是3中工作?我想这是某种Django的古怪,但这是个好消息。
def add_three(x, y, z):
return plus(plus(x, y), z)
def plus(x, y):
return x + y
x = add_three(2, 3, 4)
print (x)