Mark_safe не отображает html
Пытаюсь создать миниатюру для предварительного просмотра, тег img не отображается. Я вижу так много вопросов об этом, и пробовал различные решения безуспешно.
admin.py
class AdminProductImages(admin.TabularInline):
model = ProductImages
form = ProductImagesForm
extra = 3
max_num = 3
def image_tag(self, obj):
return mark_safe('<img src="%s" style="width:150px;height:150px;"/>') % (obj.image_file_w200_png.url)
image_tag.short_description = 'xImage'
image_tag.allow_tags = True
fields = ( 'image_file_w200_png','image_tag', )
readonly_fields = ('image_tag',)
list_display =('image_file_w200_png','image_tag')
"""
fieldsets = (
(None, {'fields': ('image_file_w200_png',)}),
)
"""
add_fieldsets = (
(None, {
'fields': ('image_file_w200_png',),
}),
)
class Media:
js = ('js/img_product_upload.js',)
models.py
class ProductImages(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
image_type = models.CharField(max_length=33,default='image_type')
image_file_w200_png = models.ImageField(
upload_to=upload_to_image_file_w200_png,
null=True,
blank=True,
default='magickhat-profile.jpg'
)
#...
forms.py
class ProductImagesForm(ModelForm):
image_file_w200_png = forms.FileField(widget=forms.ClearableFileInput(
attrs={
'class': 'image_add_product'
}
))
class Meta:
model = ProductImages
fields = ['image_file_w200_png',]
После нескольких дней, не могу найти ошибку, пока... Некоторые советы приветствуются. Django 4.0
Вы должны отформатировать строку перед тем, как обернуть ее в mark_safe, иначе вы построите строку, а не строку, обернутую в "безопасный контейнер":
class AdminProductImages(admin.TabularInline):
# …
def image_tag(self, obj):
return mark_safe('<img src="%s" style="width:150px;height:150px;"/>' % obj.image_file_w200_png.url)
или через интерполяцию строк:
class AdminProductImages(admin.TabularInline):
# …
def image_tag(self, obj):
return mark_safe(f'<img src="{obj.image_file_w200_png.url}" style="width:150px;height:150px;"/>')
