2012-03-19 44 views
2

我一直在试图弄清楚如何一直获得我的模块之一的目录的绝对路径,以便我可以打开同一目录中的文件,而不管无论该模块是直接运行还是从其他地方导入。Django:从views.py中导入模块的路径

我只是误解os.path和_ 文件 _工作,或者是否有一些在Django引起这个问题吗?

views.py:

def pathtest(request): 
    return HttpResponse(mymodule.getpath()) 

mymodule.py:

def getpath(): 
    return os.path.realpath(__file__) 

预期输出:

/home/user/projects/myproject/mymodule/mymodule.py 

实际输出:

/home/user/projects/myproject/views.py 

回答

1

你能做到这一点?

mymodule.py

def getpath(): 
    os.path.abspath(os.path.dirname(__file__)) 
+0

这似乎工作!它给了我上面的“预期输出”。如果你不介意,能否请你解释一下为什么上面的代码不能给我我所期望的和这个的作用?早些时候,我尝试了dirname(abspath(__ file__)),它不起作用,但abspath(dirname(__ file__))却起作用。概念上有什么区别?非常感谢。 – dougwt 2012-03-19 22:06:42

+0

根据我的理解,abspath()方法会清除所有相对路径,并为您提供干净的“absolutized”版本的路径,其中dirname仍可能包含相对路径。 – Furbeenator 2012-03-20 00:04:49

1

这是不是Django的,os模块是一个Python的内置。

您不必在mymodule模块中实现getpath函数,只需导入模块并从中获取__file__属性即可解决此问题。

import mymodule 
import os 
print os.path.abspath(mymodule.__file__) 

应该只是罚款

+0

该功能的getPath仅仅是我写的,说明我的问题的例子。我需要mymodule模块中的路径,以便我可以从同一个目录中打开文件,但是因为myModule被从views.py中调用/包含,所以它会给我views.py的路径。 – dougwt 2012-03-19 21:55:16