Django 2.0及以上版本的admin无法显示图片问题

在使用Django 2.0 + Python 3.6 学习过程中,作者遇到了admin后台图片无法显示的问题。通过查阅资料和官方文档,发现需要修改URL配置,使用re_path()替换path(),并正确引用MEDIA_ROOT。通过这些修改,成功解决了404错误,使图片可以正常访问。这个问题主要涉及Django的URL调度和媒体文件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在自学Django,使用的是Django 2.0 + Python 3.6 的配置,在写一个上传下载图片应用时遇到了一个问题,就是写好数据库,业务和admin的基本配置时,能看到图片名称,图片却打不开。如图:
Django自带的管理界面
在这个界面点击图片的链接是Django提示404 not found的,即是找不到图片路径。
我的admin很常规:

from django.contrib import admin

# Register your models here.
from .models import ImgData


class ImgDataAdmin(admin.ModelAdmin):
    list_display = ('name', 'user', 'create_at', 'image')
    list_filter = ['user', 'create_at']
    search_fields = ['name']


admin.site.register(ImgData, ImgDataAdmin)

后来我找了很多坛子里大神发的解决办法,也尝试了很多,包括在admin里写函数显示之类的。看来看去也就这一条是比较靠谱的,只需要修改url:

from django.conf.urls import url
from django.contrib import admin
from settings import MEDIA_ROOT
from django.views.static import serve

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^media/(?P<path>.*)$', serve, {
  
  "document_root": MEDIA_ROOT}),
]

其中我觉得管用的就是url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}这一行。于是我把最后一行加到了根url中,提示url无法被import,这个其实是Django学习者经常遇到的问题,因为Django 1.6以后的版本都没法使用url(…)了,用的都是path(…),比如:

urlpatterns = [
    path('admin/', admin.site.urls),

]

于是我发动了一下小聪明,把原代码改成了path('media/(<str:path>.*)', serve, {"document_root": MEDIA_ROOT}),这样我的整个url代码就变成了:

from django.contrib import admin
from django.urls import path, include
from picsite.settings import MEDIA_ROOT
from django.views.static import serve


urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', include('login.urls')),
    path('updownload/', include('updownload.urls')),
    path('data_form/', include(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值