【问题标题】:Page not found 404 Django media files找不到页面 404 Django 媒体文件
【发布时间】:2016-07-16 18:11:33
【问题描述】:

我可以将文件上传到我在settings.py 中设置的媒体文件夹('/peaceroot/www/media/'),如下所示

MEDIA_ROOT = '/peaceroot/www/media/'
MEDIA_URL = '/media/'

但我试图通过管理员访问上传的图像文件

http://localhost:8000/media/items/1a39246c-4160-4cb2-a842-12a1ffd72b3b.jpg

然后我收到 404 错误。

文件存在于peaceroot/www/media/items/1a39246c-4160-4cb2-a842-12a1ffd72b3b.jpg

【问题讨论】:

    标签: python django http-status-code-404 django-settings django-media


    【解决方案1】:

    在您的项目 urlpatterns 中添加媒体 url 条目:

    from django.conf.urls.static import static
    from django.conf import settings
    
    ...
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    【讨论】:

    • 另外,请确保在主项目应用程序的urls.py 文件中添加static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT),而不是在其他已安装的应用程序中。就我而言,我做错了,所以遇到了问题。
    • 文档链接:Serving files uploaded by a user during development。注意:“仅在调试模式下工作”和“不适合生产使用!”。
    【解决方案2】:

    MEDIA_ROOT 的更好方法是,

    当您转移项目时,尝试使媒体路径动态化会很容易。

    Settings.py

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

    urls.py

    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns = [
        # ... the rest of your URLconf goes here ...
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    看看这个

    https://docs.djangoproject.com/en/dev/howto/static-files/

    【讨论】:

    • STATIC_URL 应该是MEDIA_URL
    【解决方案3】:

    补充一点:如果其他答案对您不起作用,请尝试将静态 url 放在其他答案之前。像这样:

    urlpatterns = static(...) + [...]
    

    可能发生的情况是列表中的某些模式阻止请求到达静态处理程序。所以首先放置静态处理程序可以解决这个问题。为我工作。

    【讨论】:

      【解决方案4】:

      这是一个服务器错误。我假设您使用的是 Nginx。只需将其添加到您的 Nginx 配置文件(/etc/nginx/sites-available/example.com)中,就在位置 /static/

      location /media/ {
          root /home/user/myprojectdir;
      }
      

      这里,user 应该是您创建的 usernamemyprojectdir 应该是您的项目目录。 p>

      【讨论】:

        【解决方案5】:

        在我的 development 服务器中,我通过在 settings.py 中注释掉这些行来修复它

        STATICFILES_DIRS = (
             os.path.join(BASE_DIR, 'static'),
        )
        

        【讨论】:

          【解决方案6】:

          在模板中通过锚标记创建链接并将 .url 添加到该文件对象的末尾 例如

          {% for post in post %}
          
             <a href="{{post.imagefilename.url}}" > 
          
          {% endfor %}
          

          【讨论】:

            猜你喜欢
            • 2017-10-30
            • 2022-12-14
            • 2019-05-06
            • 2011-07-23
            • 1970-01-01
            • 2020-02-15
            • 2016-08-01
            • 2016-08-01
            • 2015-10-22
            相关资源
            最近更新 更多