首页 > 解决方案 > 在渲染 django tables2 之前访问每一行

问题描述

我正在使用 djangotables2 来简单地呈现我的表格,但我想检查列的每一行的一些条件并打印该值的一些附加值,但无论如何我都找不到这样做在 djangotables2 中是否可行?看法

class BowlerList(LoginRequiredMixin, PagedFilteredTableView):
    model = Bowlers
    template_name = 'bowlers_list.html'
    table_class = BowlerTable
    filter_class = BowlerListFilter
    formhelper_class = BowlerListFormHelper

    def get_context_data(self, **kwargs):
        context = super(BowlerList, self).get_context_data(**kwargs)
        context['select_list'] = UserSelect.objects.filter(user=self.request.user)
        return context

桌子

class BowlerTable(dt2.Table):
    name = tables.LinkColumn('bowler-detail', args=[A('pk')])

    class Meta:
        model = Bowlers
        fields = ('name', 'ahprank', 'pcarank')
        template_name = 'django_tables2/bootstrap-responsive.html'
        attrs = {'class': 'table table-striped table-bordered table-hover'}
        per_page = 10

模板

{% render_table table %}

我需要将 Name 列的值与我​​将在“select_list”中获得的值进行比较,我通过视图作为上下文数据获得

标签: djangodjango-tables2

解决方案


根据文档,您可以自定义每个单元格的呈现方式。在这里查看:https ://django-tables2.readthedocs.io/en/latest/pages/custom-data.html#table-render-foo-methods

基本上你会添加render_<column_name>方法并在那里做你的事情。像这样:

class BowlerTable(dt2.Table):
    name = tables.LinkColumn('bowler-detail', args=[A('pk')])

    class Meta:
        model = Bowlers
        fields = ('name', 'ahprank', 'pcarank')
        template_name = 'django_tables2/bootstrap-responsive.html'
        attrs = {'class': 'table table-striped table-bordered table-hover'}
        per_page = 10

    def render_name(self, record):
        # Your code here

您可能需要的唯一额外的事情是传递表对象select_list的初始化 ( __init__),以便能够在新方法中访问它。


推荐阅读