отображение изображения в макете сетки django-администратор

#django #django-forms #django-admin

Вопрос:

во-первых, у меня возникли проблемы с отображением миниатюр в Django-admin, я попробовал приведенный ниже код, но, похоже, он не работает,

 class Pictures(models.Model):
    image = models.ImageField(null=True)
    date_added = models.DateField(auto_now_add=True)
    organization = models.ForeignKey(Organisation,on_delete=models.CASCADE)
    

    def __unicode__(self):
        return f"{self}"


    @mark_safe
    def image_img(self):
        if self.image:
            return format_html('<img src="{0}" style="width: 60px; height:65px;" />'.format(self.image.url))
        else:
            return format_html('<img src="" alt={0} style="width: 60px; height:65px;" />'.format("noimagefound"))
            
    image_img.short_description = 'Image'
    image_img.allow_tags = True



class PicturesAdmin(admin.ModelAdmin):

    list_display = ('image', 'date_added','image_img')
    autocomplete_fields = ['organization']

    list_display_links = ('date_added',)
 

Я также хочу отобразить эти миниатюры в макете сетки, как я могу добиться этого любым простым подходом

введите описание изображения здесь

Комментарии:

1. вам не нужен юникод , если вы используете python3, вместо этого используйте str .

2. а также для поля изображения null=True страшно, вместо этого используйте просто пробел=True.

Ответ №1:

models.py

 from django.utils.safestring import mark_safe
class Pictures(models.Model):
    image = models.ImageField(blank=True,upload_to="pictures/")
    date_added = models.DateField(auto_now_add=True)
    organization = models.ForeignKey(Organisation,on_delete=models.CASCADE)
    

    def __str__(self):
        return f"{self.pk}"


    def image_img(self):
        if self.image:
            return mark_safe('<img src="%s" style="width: 60px; height:65px;" />' % self.image.url )
        else:
            return mark_safe('<img src="" alt="%s" style="width: 60px; height:65px;" />' % "noimagefound")
            
    image_img.short_description = 'Image'
 

Комментарии:

1. я изменил его на маркировку безопасный, но все тот же

2. @AtifShafi я отредактировал свой ответ. сначала добавьте пробел=True,а также upload_to и python manage.py эмиграции и python manage.py мигрируйте.и я немного изменил свой image_img.

3. я внес все изменения, но они по-прежнему показывают то же самое

4. @AtifShafi тогда вам нужно загрузить новые изображения, потому что вы уже изменили путь к изображениям при использовании upload_to=»картинки/».загрузите новые изображения, и это должно сработать.

5. @AtifShafi не забудьте импортировать mark_safe и заменить «{}» на «%s», как я сделал выше.

Ответ №2:

Я думаю, ты format_html неправильно понял роль

     @mark_safe
    def image_img(self):
        if self.image:
            return format_html('<img src="{}" style="width: 60px; height:65px" />', self.image.url)
        else:
            return format_html('<img src="" alt="{}" style="width: 60px; height:65px" />', "noimagefound")
            
 

Комментарии:

1. я приму ответ , как только проблема будет устранена, никаких проблем