How do I get the filepath for a class in Python?
Given a class C in Python, how can I determine which file the class was defined in? I need something that can work from either the class C, or from an instance off C.
The reason I am doing this, is because I am generally a fan off putting files that belong together in the same folder. I want to create a class that uses a Django template to render itself as HTML. The base implementation should infer the filename for the template based on the filename that the class is defined in.
Say I put a class LocationArtifact in the file "base/artifacts.py", then I want the default behaviour to be that the template name is "base/LocationArtifact.html".
Solution 1:
You can use the inspect module, like this:
import inspect
inspect.getfile(C.__class__)
Solution 2:
try:
import sys, os
os.path.abspath(sys.modules[LocationArtifact.__module__].__file__)
Solution 3:
This is the wrong approach for Django and really forcing things.
The typical Django app pattern is:
-
/project
-
/appname
- models.py
- views.py
-
/templates
- index.html
- etc.
-
/appname