我在views.py中使用金字塔
from pyramid.response import Response
from pyramid.view import view_config
import os
import uuid
import shutil
import hashlib
from .service.fun import *
def forservo():
return "HAppy HERE"
@view_config(route_name='home',request_method='GET')
def home(request):
return Response('html')
在fun.py
from ..views import *
print forservo()
抛出错误,提示未定义名称“ forservo”
文件夹结构为
myapp
myapp
service
__init__.py
fun.py
__init__.py
views.py
答案 0 :(得分:2)
您有一个cyclic import-fun.py
从views.py
导入和views.py
从fun.py
导入。
在这种情况下,事情大致是这样发生的:
Python打开views.py
并执行到from .service.fun import *
行
然后必须停止执行views.py
并打开fun.py
。
fun.py
的第一行告诉它停止并导入views.py
import语句返回尚未定义forservo
函数的部分执行的模块。
可以通过将fun.py和views.py所需的通用代码位移动到单独的模块中来解决循环导入问题。一种不太优雅的解决方案是将某些导入移动到导致循环导入错误的函数下方,或将其放置在需要导入的函数内部。
答案 1 :(得分:0)
在此文件夹结构中
myapp
myapp
service
__init__.py
fun.py
__init__.py
views.py
views.py包含内容的地方
from pyramid.response import Response
from pyramid.view import view_config
import os
import uuid
import shutil
import hashlib
from .service.fun import *
def forservo():
return "HAppy HERE"
@view_config(route_name='home',request_method='GET')
def home(request):
return Response('html')
然后fun.py中的import语句是:
from myapp.views import forservo()
print forservo()
,这将显示“ HAPPy HERE”(快乐)。