【问题标题】:Django - serving user uploaded imagesDjango - 为用户上传的图片提供服务
【发布时间】:2012-12-16 12:15:38
【问题描述】:

我在从我的 Django 应用程序中为用户上传的文件提供服务时遇到了一些问题:

来自models.py:

class Picture (models.Model):

    title = models.CharField(max_length=48)

    date_added = models.DateTimeField(auto_now=True)

    content = models.ImageField(upload_to='pictures')

文件从 Django 管理员上传到 user_res/pictures/ 文件夹。

来自项目的settings.py:

MEDIA_ROOT = 'user_res'

MEDIA_URL = '/user_res/'

STATIC_ROOT = ''

STATIC_URL = '/static/'

每次我尝试引用静态资源(即 css 或 js 文件)时,使用诸如

之类的 URL 一切正常
http://localhost:8000/static/<subfolder>/main.css.

但是,我无法访问用户上传的文件(这些文件是由管理界面在 user_res/pictures 文件夹中使用相对 URL 创建的,例如

user_res/pictures/test.jpg

URL 是使用 Django 图片模型可调用的这行代码动态创建的:

return '<img src="{}"/>'.format(self.content.url)

我在 url.py 文件中没有用于静态或媒体文件的专用 url-s。

有人知道如何让 Django 为媒体文件提供服务吗?我知道对于实时环境,我需要配置一个 http 服务器来为该特定目录提供服务,但现在我想维护一个轻量级开发套件。

谢谢。

【问题讨论】:

标签: python django media


【解决方案1】:

编辑您的 urls.py 文件,如下所示。

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

编辑你的项目 settings.py 看起来像:

#Rest of the settings
MEDIA_URL = '/media/'
MEDIA_ROOT = 'media'
STATIC_ROOT = ''
STATIC_URL = '/static/'

请仔细阅读 Django 官方文档中关于服务用户上传的文件。文档链接:https://docs.djangoproject.com/en/1.5/howto/static-files/#serving-files-uploaded-by-a-user

【讨论】:

    【解决方案2】:

    我认为 url 属性返回一个相对 URL (Django's FileField documentation),所以你应该有:

    return '<img src="{}"/>'.format(MEDIA_URL + self.content.url)
    

    相对 URL 不起作用,因为访问“http://localhost/books/”的用户将请求“http://localhost/books/user_res/pictures/test.jpg”。

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多