蟒蛇:进口从相对路径
问题描述:
我试图从中结构类似于蟒蛇:进口从相对路径
controller/
/__init__.py
/login.py # <- I'm here
template/
/__init__.py # from template import *
/template.py # contains class Template
蟒蛇命名模板文件夹导入似乎能够看到需要的类,但未能将其导入,这是登录。 PY代码
import webapp2
import template
class Login(webapp2.RequestHandler):
#class Login(template.Template):
def get(self):
self.response.out.write(dir(template))
打印
['Template', 'Users', '__builtins__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', 'jinja2', 'os', 'template', 'urllib', 'webapp2']
切换进口线
个import webapp2
import template
#class Login(webapp2.RequestHandler):
class Login(template.Template):
def get(self):
self.response.out.write(dir(template))
打印
class Login(template.Template):
AttributeError: 'module' object has no attribute 'Template'
我究竟做错了什么?感谢
编辑:我创建了包含
index/
/__init__.py # from index import *
/index.py # class Index
/index.html
另一个文件夹命名为指数
内index.py代码
from template import Template
class Index(Template):
def get(self):
self.render("/index/index.html")
这段代码只是工作没有任何错误,但一索引控制器文件夹失败
答
问题是,当template/__init__.py
确实:
from template import *
它不是从那里你想导入 - 它是从本身进口的一切,因为有一个名为“模板”与__init__.py
文件夹中定义了一个名为“模板”模块 - 这比获得优先权它里面的模块也叫'模板'。你需要明确告诉Python你需要内部模块,你可以这样做:
from .template import *
是不是模板包(目录),其中包含模板模板(文件),其中包含模板类?在这种情况下,你需要template.template.Template。 – 2012-07-28 07:27:01
在包中创建一个与模块名称相同的包并不是一个好主意。 – BrenBarn 2012-07-28 07:29:14
Guy我做了另一个测试用例,它只是工作,包名是不同的? – netdur 2012-07-28 07:56:38