django Imagefield怎么去上传显示出来,最主要是显示,坑了很久

自从学了Django,哪儿哪儿都是坑啊,首先就是版本的坑,网上找了1.6版本的代码用在2.0身上,当然搞不定了。以下是针对Django2.0版本,如何才能在自带的管理后台显示图片,我查了解决办法很多,这个又快又方便。
下面是刚开始遇到的问题,点击“图片”列下的链接会报错找不到图片,sample列下的图片都无法正确显示,:如图

在这里插入图片描述
原来无法正确显示图片的代码如下:

配置settings.py,添加一个上传图片或者文件指定目录
MEDIA_URL = ‘static/media/’#
MEDIA_ROOT=os.path.join(BASE_DIR,‘static/media’)#
STATIC_URL = ‘/static/’#静态文件目录

配置app模型models.py
from django.db import models
from django.utils.safestring import mark_safe
class PicTest(models.Model):
# 这里设置的文件夹会自动生成保存在你在settings.py中定义的静态图片目录里
pic = models.ImageField(u’图片’,upload_to=‘mywork_img/%Y/%m/%d’,null=True,blank=True,)
name= models.CharField(u’图片名称’,max_length=32,default="")
# 列表显示,return 返回的是图片的地址
def admin_sample(self):
return mark_safe(’’%(self.pic,))
admin_sample.short_description = ‘Sample’
admin_sample.allow_tags = True
class Meta:
db_table = “mywork_pictest”
verbose_name = ‘piclist’
verbose_name_plural = verbose_name
def str(self):
return self.admin_sample

配置admin.py
from django.contrib import admin
from mywork.models import PicTest
class PicTestAdmin(admin.ModelAdmin):
list_display = (‘name’,‘pic’,‘admin_sample’)
admin.site.register(PicTest,PicTestAdmin)

根路由urls.py 默认不动

from django.contrib import admin
from django.urls import path
urlpatterns = [
path(‘admin/’, admin.site.urls),
]

------经过修改后代码(只列出修改过或新添加的语句或段):--------

settings.py
MEDIA_ROOT =BASE_DIR#os.path.join(BASE_DIR, ‘media’)
MEDIA_URL = ‘/media/’

models.py
from mang.settings import MEDIA_URL
def admin_sample(self):
return mark_safe(’’%(MEDIA_URL,self.pic,))

admin.py
无变化

urls.py
from django.contrib import admin
from django.urls import path
from mang.settings import MEDIA_ROOT #导入项目设置文件 获得MEDIA_ROOT定义的路径
from django.urls import re_path #从原生urls类中导入重定向路径方法
from django.views.static import serve # server

urlpatterns = [

path('admin/', admin.site.urls),
# 重定向静态文件的读写路径(原来1.6的版本用的是url,坑苦我了,又去翻文档)
re_path(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
#re_path(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
# path('media/(<str:path>.*)', serve, {"document_root": MEDIA_ROOT})

]

修改后的效果:点击图片列下的链接可以直接打开图片,地址应该是重新定义了,右侧也可以显示新添加的图片。

再加一个,点击图片也能查看,实际就是给图片做个超链接,

return mark_safe(’’%(MEDIA_URL,self.pic,MEDIA_URL,self.pic,))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值