如何在Django中从.py文件读取媒体文件?
我可以这样读取 a.txt
文件:
text = open('a.txt', 'rb').read()
但是当我把 a.txt
放到 media
文件夹里时,这个方法就不管用了:
text = open('/media/a.txt', 'rb').read()
我遇到了以下错误:
IOError at /
[Errno 13] file not accessible: '/media/a.txt'
我该如何从 media
目录读取文件呢?
3 个回答
-1
在Google App Engine上,你不能直接从应用代码中读取静态文件。被标记为静态的文件是从不同的服务器提供的,而不是和你的应用一起打包的。如果你的应用需要读取这些文件,而且不需要直接给用户提供,那就不要把它们标记为静态。如果你既想直接给用户提供这些文件,又想在Python代码中读取它们,那你需要在项目中放两个副本,一个标记为静态,另一个不标记。
2
开头的 /
表示这是一个绝对路径,也就是说它是从文件系统的根目录开始的。如果你想从项目的路径中读取一个文件,那么你需要用项目的路径来开头这个文件名,或者使用 __file__
和 os.path
中的函数来创建一个合适的相对路径或绝对路径。
9
为了让这个内容更通用(并确保你使用的是媒体文件夹),你可以把它改成:
import os
from django.conf import settings
text = open(os.path.join(settings.MEDIA_ROOT, 'a.txt'), 'rb').read()