Django中使用django_table2如何加一列操作

要加入列需要自定义一个列,doc中给出如下的例子:
>>> from django.utils.safestring import mark_safe
>>> from django.utils.html import escape
>>>
>>> class ImageColumn(tables.Column):
...     def render(self, value):
...         return mark_safe('<img src="/media/img/%s.jpg" />'
...                          % escape(value))
...

因此需要自定义一个列的操作:

class HandleColumn(tables.Column):
    def render(self, value):
        return mark_safe(
            '<a class="btn btn-warning btn-xs" href="/task/edit/%s/" style="margin-right: 5px;" >
        <span class="glyphicon glyphicon-edit" style="padding-right:3px;"></span>编辑</a>
        <a class="btn btn-danger btn-xs" href="/task/delete/%s/"><span class="glyphicon glyphicon-remove" style="padding-right:3px;"></span>删除</a>
' % ( escape(value), escape(value)))

接下来就是使用:

from django_tables2.utils import A
class TaskTable(tables.Table):
    # title = tables.Column(attrs={"th": {"class": "text-center"}, "td": {"class": "text-center"}}) 这个是我的记忆,没有什么用
    handle = HandleColumn(verbose_name="操作", accessor=A('id')) # 因为编辑或者删除时必须要有id,所以需要访问 id 的值,这里 A 是一个访问器,需要提前导入

    def __init__(self, *args, **kwargs):
        super(TaskTable, self).__init__(*args, **kwargs)
        # 下面纯粹是为了循环,里面的名称没有什么用处。
        for name in self.columns.items():
            # 给每一列文字加上居中
            self.attrs.update({"th": {"class": "text-center"}, "td": {"class": "text-center"}})

    class Meta:
        model = Task
        sequence = ('id', 'level', 'title', 'user', 'detail')
        attrs = {'class': 'table table-sm table-bordered', "id": "mytable"}
        template_name = 'django_tables2/bootstrap4.html'

 

posted @ 2022-12-04 20:52  心无万物  阅读(457)  评论(0)    收藏  举报