如何在django生产环境中提供媒体文件?

H.G*_*.G. 11 python django

在我的settings.py文件中: -

DEBUG = False
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

STATIC_URL = '/static/'
LOGIN_URL = '/login/'
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)

在我的urls.py文件中: -

urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

当我上传个人资料图片时,它会上传到指定的文件夹.但是当我访问用户个人资料网址时,我在终端中收到这样的错误

"GET /media/profile_images/a_34.jpg HTTP/1.1" 404 103
Run Code Online (Sandbox Code Playgroud)

a_34.png存在于/ media/profile_images /中

那为什么它没有在浏览器上显示,我收到404错误?

Asw*_*K P 8

Django不是为了在生产环境中提供媒体文件.您必须直接从Web服务器进行配置.

例如

如果您在生产中使用Apache Web服务器,请将以下内容添加到您的虚拟主机配置中

Alias /media/ /path/to/media_file/

<Directory /path/to/media_file/>
Order deny,allow
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

如果您使用Nginx,您将拥有类似的配置.


Afn*_*zir 5

Django不鼓励在服务器上的生产环境中提供媒体文件。使用Amazon S3等云服务来存储您的媒体文件。请参阅此Django文档服务媒体,然后在MEDIA_URL中提供该路径。