我在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下不起作用,导致"视图不存在"错误。我该如何解决?
答案 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)
输出符合预期。请注意,plus
从add_three
调用时已经处于上下文中。因此它不会失败。