如何在Django中从.py文件读取媒体文件?

4 投票
3 回答
8515 浏览
提问于 2025-04-15 21:51

我可以这样读取 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()

撰写回答