如何使用django-tables2显示图像

时间:2018-06-05 14:44:44

标签: python django django-models django-tables2

我是Django-tables2的新手,我已经四处寻找,但没有太多运气,所以寻求一些帮助。我试图在django-tables2的单元格中显示图像;但是,我只有链接到我页面上的图像,需要单击链接并打开新选项卡才能看到图像。以下是我的代码现在的样子:

models.py   

class Item(models.Model):
    title = models.CharField(max_length=50)
    author = models.ForeignKey(Author, on_delete=models.SET_NULL, null=True)
    collection = models.ManyToManyField(Collection)
    url = models.URLField(max_length=200, null=True)
    date = models.DateField('Date Added', default=datetime.date.today)
    item = models.ImageField(upload_to='media/img', null=True)
    tag = models.CharField(max_length=100, null=True)

    class Meta:
        ordering = ["title", "date"]

    def __str__(self):
        return self.title


tables.py

class ImageColumn(tables.Column):
    def render(self, value):
        return mark_safe('<img src="/media/img/%s" />' % escape(value))

class ItemTable(tables.Table):
    image  = ImageColumn('item')

    class Meta:
        model = Item
        fields = ('id', 'item', 'title', 'author', 'collection', 'tag', 'date')
        template_name = 'django_tables2/bootstrap.html'

在我的网页上,它显示如下: enter image description here

似乎图像列没有任何帮助,但我不知道如何做到这一点。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

你的方法似乎很好,但我认为某处有一个小错误。这是django-tables2与图像的实际使用的简化版本:

from django.utils.html import format_html

class ImageColumn(tables.Column):
    def render(self, value):
        return format_html(
            '<img src="{url}" height="50px", width="50px">',
            url=value
        )

如果仍然无效,请检查生成的HTML(上下文菜单 - &gt;浏览器中的查看源代码)。

答案 1 :(得分:0)

根据上面@Jieter提供的答案,这就是我所做的,并且有效。

tables.py

    class ImageColumn(tables.Column):
        def render(self, value):
            return format_html(
               '<img src="{url}" class="fav" height="20px", width="20px">',
                url=value
                )
    class DataTable(tables.Table):

        fav = ImageColumn()

在我的views.py中,我将值分配给了图像:

views.py

    data = []
    dt = {
          "fav": "/static/images/fav.png"
          }

    data.append(dt)

    return DataTable(data)

HTH