django後臺管理頁列表顯示圖片

    自從學了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('<img src="%s" height="50" width="50" />'%(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('<img src="%s%s" height="50" width="50" />'%(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('<a href="%s%s"><img src="%s%s" height="50" width="50" /></a>'%(MEDIA_URL,self.pic,MEDIA_URL,self.pic,))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章