我已经定义了一个包含图像链接的模型。有没有办法在模型项目列表中显示图像?我的模型看起来像这样:
class Article(models.Model):
url = models.CharField(max_length = 200, unique = True)
title = models.CharField(max_length = 500)
img = models.CharField(max_length = 100) # Contains path to image
def __unicode__(self):
return u"%s" %title
有没有办法将图像与标题一起显示?
答案 0 :(得分:59)
您可以使用其他名称创建模型实例方法,为其输出允许HTML标记,并将此方法添加为列表字段。这是一个例子:
首先添加一个新方法,返回包含图像的HTML:
class Article(models.Model):
...
def admin_image(self):
return '<img src="%s"/>' % self.img
admin_image.allow_tags = True
然后将此方法添加到列表中:
class ArticleAdmin(admin.ModelAdmin):
...
list_display = ('url', 'title', 'admin_image')
答案 1 :(得分:11)
def image_tag(self, obj):
return u'<img src="%s" />' % obj.image
image_tag.short_description = 'Image'
image_tag.allow_tags = True
并在您的admin.py中添加:
readonly_fields = ('image_tag',)
答案 2 :(得分:5)
更新Django 2.0.6
我正在最新的 django 2.0.6 中解决了此问题。我想在django-admin的listview中实现图像缩略图和更多详细信息。
下面的图片是我的默认管理员列表视图。
这是我的models.py:
from django.db import models
from django.utils.safestring import mark_safe
# Create your models here.
class Product(models.Model):
title = models.CharField(max_length=120)
description = models.TextField()
price = models.DecimalField(decimal_places = 2, max_digits = 20, default = 00.00)
image = models.ImageField(upload_to=change_image_name, null=True, blank=True)
def image_tag(self):
if self.image:
return mark_safe('<img src="%s" style="width: 45px; height:45px;" />' % self.image.url)
else:
return 'No Image Found'
image_tag.short_description = 'Image'
def __str__(self):
return self.title
请注意,我必须在图像字符串上使用mark_safe(),否则 将在django-admin中获得转义的html代码而不是thubnail
最后,这是我的admin.py
from django.contrib import admin
from .models import Product
# Register your models here.
class ProductAdmin(admin.ModelAdmin):
list_display = ('title', 'description', 'price', 'image_tag')
admin.site.register(Product, ProductAdmin)
在这里,我们也必须注册 ProductAdmin类,我不知道 而且没有用。
答案 3 :(得分:4)
您也可以直接在admin
中添加图片class ArticleAdmin(admin.ModelAdmin):
def admin_image(self, obj):
return '<img src="%s"/>' % obj.img
admin_image.allow_tags = True
list_display = ('url', 'title', 'admin_image')
答案 4 :(得分:1)
(我正在使用Django 1.5) 除了按照接受的答案中的步骤之外,我还必须将图像标记标记为“安全”
为此,请使用django.utils.safestring包的mark_safe方法包装返回值。
代码示例:https://stackoverflow.com/a/14075441/1063031
django docs:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#filters-and-auto-escaping
答案 5 :(得分:0)
您可以为您的模型覆盖django管理员视图。有关详细信息,请参阅http://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates。
在简介中,您需要创建一个模板:templates / admin / your_app / article / change_form.html 然后添加html来显示图像。
答案 6 :(得分:0)
http://www.djangosnippets.org/snippets/239/
还有,如果您使用的是1.2,则可以将上述内容与只读字段结合使用。