【问题标题】:Displaying image source from MEDIA_ROOT显示来自 MEDIA_ROOT 的图像源
【发布时间】:2013-01-10 17:14:54
【问题描述】:

我的 media_root 路径设置为

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'media')
MEDIA_URL = 'media/'

我的项目结构如此

   Project_Name/
     media/
       profiles/
   App_Name

当我尝试引用 profiles/ 目录中的图像时,我得到 404 no resource found 错误。

     src="{{ MEDIA_URL }}{{ result.photo }}">

这会解析为找不到http://127.0.0.1:8000/media/profiles/image1.jpg。我是否缺少绝对路径,我使用的是 DJango 1.4,我的 urls.py 中没有设置媒体根目录,但我没有使用我的 STATIC_URL 定义并且我能够找到我的静态资源?

【问题讨论】:

    标签: python django media


    【解决方案1】:

    这是你项目的主路径

    PROJECT_ROOT = os.path.join(os.path.dirname(__file__), '..')
    SITE_ROOT = PROJECT_ROOT
    

    在这里,系统调用你上传图片存放的媒体文件夹路径

    MEDIA_ROOT = os.path.join(SITE_ROOT, 'media')
    MEDIA_URL = '/media/'
    

    这里是你的静态文件,其中 css/js/img/ ... 存储

    STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
    STATIC_URL = '/static/'
    

    静态文件的附加位置

    STATICFILES_DIRS = (
        os.path.join(SITE_ROOT, 'staticfiles'),
    )
    

    urls.py

    from django.conf.urls import patterns, include, url
    from django.conf.urls.static import static
    from django.contrib import admin
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    from project_name import settings
    admin.autodiscover()
    
    urlpatterns = patterns('',
         .........
         .........
    ) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
    urlpatterns += staticfiles_urlpatterns()
    

    【讨论】:

    • 尝试解释为什么这是解决方案以及它是如何工作的。就目前而言,这只是一个没有解释的答案。
    • 好的,通过这些更改,/media/ 目录现在在根级别创建,我可以看到正在添加的文件(上传工作)。我仍然收到 404 file not found 错误,说明我在模板中引用文件的方式?
    • 您需要更新将连接到您的媒体和静态的网址。完成更新我的答案...
    • 没有将您建议的更改添加到 urls.py,而是将我在模板中引用文件的方式从 {{ MEDIA_URL }} 更改为 {{ STATIC_URL}},修复了它。为什么会奏效?
    【解决方案2】:

    【讨论】:

    • 请停止到处发送垃圾邮件。您可以添加评论并链接您的答案,但只需在任何地方重写它就会让您投反对票。
    • 好的。我是堆栈溢出社区的新手。这就是为什么我不知道。