django2无法显示media文件下的图片

 这次我遇到了一个坑,我通过django中的models模块与mysql数据库做交互,其中涉及到存图片的问题,我的设想是上传图片,然后图片保存在media下的img文件夹中,我就在settings中配置media的静态路由。

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

然后我就去urls中设置media的路由。

from django.contrib import admin
from django.urls import path, re_path
from django.conf.urls.static import static
from django.views.static import serve
from . import settings
from blogs import views
urlpatterns = [
    path('admin/', admin.site.urls),
    #meidia的相关配置
    re_path(r'media/(?P<path>.*)$', serve, {'document_root':settings.MEDIA_ROOT}),
    path('', views.index),
    path('<int:id>', views.commodity_details, name='commodity_detail'),
    path('search/commodity', views.search_commodity, name = 'search_commodity'),
    path('search/<path:sort>', views.search_sort, name = 'search_sort'),
    path('login', views.login, name = 'login'),
    path('user_login', views.user_login, name = 'user_login'),
    path('user_register', views.user_register, name = 'user_register'),

]
# urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

起先我是按照大众思想,就是代码块最后面的那行注释了的代码进行配置的。结果发现其他的都没问题,就是在前端中不显示图片,检查时图片url什么的都没问题,状态码也是200,也没有报错,但是图片就是不显示,这就很头疼,后来才发现当我这样在数据库存入少量图片的时候,图片还能显示,但是当我的数据存多了之后,就没有办法显示了。原来是应为media下面还有一个img文件,是这趟导致图片显示不出来的。

后来我就将

# urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

这行代码注释了,(切记一定要注释掉或删除上面的代码)加上了这行代码

re_path(r'media/(?P<path>.*)$', serve, {'document_root':settings.MEDIA_ROOT}),

当然在这行代码前不要忘了导包

from django.urls import path, re_path

这样就可以成功显示media中img下的文件了。

这里我还是将我models中创建表的代码贴在这里。

commodity_image = models.ImageField(upload_to = 'img')

好了,这次的python之坑也就先到这里了,如果各位有什么疑问的话,欢迎留言。

猜你喜欢

转载自blog.csdn.net/qq_41983562/article/details/88886172