视图在Python 3中不存在,但在Python 2中存在

时间:2015-12-28 19:52:24

标签: 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):
   return render(...)

这在Python 3下不起作用,导致"视图不存在"错误。我该如何解决?

1 个答案:

答案 0 :(得分:3)

问题在于Python解释你的观点的方式。

执行视图方法view1时,view_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

但如果方法重新安排为:

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)

输出符合预期。请注意,plusadd_three调用时已经处于上下文中。因此它不会失败。