python:从相对路径导入

时间:2012-07-28 07:09:51

标签: python google-app-engine

我正在尝试从名为template的文件夹导入,其结构类似于

controller/
          /__init__.py
          /login.py # <- I'm here
template/
        /__init__.py # from template import *
        /template.py # contains class Template

python似乎能够看到need类但无法导入它,这是login.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的文件夹,其中包含

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

此代码只是没有任何错误,但是一个索引控制器文件夹失败

1 个答案:

答案 0 :(得分:5)

问题在于template/__init__.py

from template import *

它不会从您认为的位置导入 - 它是从本身导入所有内容,因为拥有一个名为“template”且带有__init__.py的文件夹定义了一个名为“模板”的模块 - 它优先于其内部的模块,也称为“模板”。你需要明确地告诉Python你需要内部模块,你可以这样做:

from .template import *