Просмотр миниатюр загруженных изображений в админке django

Я пытаюсь добавить миниатюры в список в админке django.

Это мой admin.py для моего приложения, я зашел так далеко:

from django.contrib import admin
from .models import Image
from django import forms
from django.db import models

class ImageAdmin(admin.ModelAdmin):
    list_display = ("label","tag","order",'Edit','image_img')
    list_editable= ("order",)
    list_filter = ('tag',)
    search_fields = ('tag', 'label')
    ordering = ['-order']
    list_display_links = ('Edit', )
    def Edit(self, obj):
        return "Edit" 
    def image_img(self,obj):
        if obj.pic:
            return '<img src="%s"  height="100px"/>' % obj.pic.url
        else:
            return 'No_image'
    image_img.short_description = 'Image'
    image_img.allow_tags = True    
admin.site.register(Image,ImageAdmin)

это то, что я получаю

Мой объект для изображения называется "pic". Если я просто добавлю его в список, django вернет ссылку с полным путем. Я искал шаблон для просмотра списка, чтобы добавить безопасный фильтр, но не смог его найти. Любая другая идея, как этого достичь?


person Adam    schedule 06.12.2018    source источник


Ответы (1)


Если вы используете Django > 2.0, вы можете пометить подпрограмму как безопасную с помощью декоратора mark_safe():

from django.utils.safestring import mark_safe

@mark_safe
def image_img(self,obj):
    if obj.pic:
        return '<img src="%s"  height="100px"/>' % obj.pic.url
    else:
        return 'No_image'

Его также можно использовать как функцию:

def image_img(self,obj):
    if obj.pic:
        return mark_safe('<img src="%s"  height="100px"/>' % obj.pic.url)
    else:
        return 'No_image'

Я считаю, что в более старых версиях Django вы можете просто установить для параметра allow_tags значение true:

image_img.allow_tags = True  # Put this after the function definition
person Jonah Bishop    schedule 06.12.2018
comment
Работает как магия. Спасибо, сэр. Я искал способ отображать изображения в поле зрения, и этот код был именно для старой версии Django. - person Adam; 06.12.2018