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

时间:2011-01-19 09:37:44

标签: python django django-views


我试图在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。有人可以指出我正确的方向。

提前致谢,
Rupesh

2 个答案:

答案 0 :(得分:6)

据我所知,C:\Django_example\MySample\webserver.pyC:\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路径中某处可能有/../

从视图中打印sys.path后会得到什么?

答案 1 :(得分:0)

要获取当前目录路径,您可以执行以下操作。

    import os  
    os.path.abspath(os.path.dirname(__file__))

这将返回路径名(绝对路径)的标准化绝对化版本,并且它将规范化路径。例如,在Unix和Mac OS X系统上,路径/ var / www / project可以正常工作,但在Windows系统上并不是一个好的路径。规范化路径会将正斜杠转换为反斜杠。规范化也会使冗余分隔符崩溃,例如路径A / foo /../ B将归一化为A / B.

Rupesh