Skip to main content
 首页 » 编程设计

python之为什么 python __file__ 变量在 DJango 中使用时返回错误路径

2025年05月04日34lvdongjie


尽管我得到了正确的路径,但我试图在 django 下使用 python __file__ 变量检索文件路径。它的行为有点奇怪。这是我附加的示例代码,请告诉我为什么会这样。

from django.shortcuts import render_to_response   
import datetime 
 
class WebServer(): 
 
 
    def __init__(self): 
        pass 
 
    def display_first_page(self, request): 
 
        print "File Path: ", __file__ 
        return render_to_response('Hello') 

我已将此代码存储在给定位置:C:\Django_example\MySample。理想情况下,它应该返回类似 C:\Django_example\MySample\webserver.py 的内容,但我得到的是 C:\Django_example\MySample\..\MySample\webserver.py。有人可以指出我正确的方向吗?

提前致谢,
鲁佩什

请您参考如下方法:

据我所知,C:\Django_example\MySample\webserver.py 和 C:\Django_example\MySample\..\MySample\webserver.py指向同一个文件,所以它不是错误的。

如果您想要更简洁的路径表示,请尝试:

import os 
print "File Path: ", os.path.realpath(__file__) 

更新(试图理解__file__的输出)

我可以重现该行为的唯一方法是更新 sys.path。示例:

[me@home]$ cd /project/django/xyz 
[me@home]$ ./manage.py shell 
(InteractiveConsole) 
>>> from app import models as M 
>>> M.__file__ 
'/project/django/xyz/app/models.pyc' 
>>> import sys 
>>> sys.path.append('../') 
>>> from xyz.app import models as N 
>>> N.__file__ 
'/project/django/xyz/../xyz/app/models.pyc' 

由于绝对路径是通过将相对路径附加到基本路径形成的,我怀疑您的 python 路径中某处可能有一个 /../。

从 View 中打印 sys.path 会得到什么?