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

Ris*_*ise 1 python django django-views


我试图__file__在django下使用python 变量检索文件路径,虽然我得到了正确的路径.这种行为有点奇怪.这是我附上的示例代码,请让我知道为什么这样做.

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')
Run Code Online (Sandbox Code Playgroud)

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

提前谢谢,
Rupesh

Sha*_*hin 6

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

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

import os
print "File Path: ", os.path.realpath(__file__)
Run Code Online (Sandbox Code Playgroud)

更新(尝试理解输出__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'
Run Code Online (Sandbox Code Playgroud)

由于绝对路径是通过将相对路径附加到基本路径而形成的,因此我怀疑您/../的python路径中可能存在某个位置.

sys.path从您的视图打印时,您会得到什么?

  • 我认为在os.path上有一个realpath方法的事实表明这不是完全出乎意料的行为. (2认同)