蟒蛇:进口从相对路径

问题描述:

我试图从中结构类似于蟒蛇:进口从相对路径

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") 

这段代码只是工作没有任何错误,但一索引控制器文件夹失败

+0

是不是模板包(目录),其中包含模板模板(文件),其中包含模板类?在这种情况下,你需要template.template.Template。 – 2012-07-28 07:27:01

+1

在包中创建一个与模块名称相同的包并不是一个好主意。 – BrenBarn 2012-07-28 07:29:14

+0

Guy我做了另一个测试用例,它只是工作,包名是不同的? – netdur 2012-07-28 07:56:38

问题是,当template/__init__.py确实:

from template import * 

它不是从那里你想导入 - 它是从本身进口的一切,因为有一个名为“模板”与__init__.py文件夹中定义了一个名为“模板”模块 - 这比获得优先权它里面的模块也叫'模板'。你需要明确告诉Python你需要内部模块,你可以这样做:

from .template import *