我试图在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
答案 0 :(得分:6)
据我所知,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路径中某处可能有/../
。
从视图中打印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