python – django:django-tables2 DetailView CBV不会显示单个对象

我有一张桌子

import django_tables2 as tables
from .models import Account
from django_tables2.utils import A  # alias for Accessor


class AccountTable(tables.Table):
    nickname = tables.LinkColumn('accounts:detail',args=[A('pk')])

    class Meta:
        model = Account
        attrs = {'class': 'table table-striped table-hover'}
        exclude = ("created","modified","destination")

一个看法:

class DetailView(SingleTableMixin,generic.DetailView):

    template_name = 'accounts/account_detail.html'
    context_table_name = 'table'
    model = Account
    table_class = AccountTable
    context_object_name = object

    @method_decorator(login_required)
    def dispatch(self,*args,**kwargs):
        return super(DetailView,self).dispatch(*args,**kwargs)

    def get_context_data(self,**kwargs):
        context = super(DetailView,self).get_context_data(object=self.object)
        context['title'] = 'Account Detail'
        context['pk'] = self.kwargs.get(self.pk_url_kwarg,None)
        return context

还有一个模板:

它正确地获取对象pk和所有内容,但不会仅发送一个对象来填充表.我知道它获取对象,因为object.id和object.nickname都正确显示.我知道可以只显示一个特定的对象,因为我在同一个项目中有另一个应用程序只显示一个对象,如果你单击链接将你带到DetailView(我借用我的帐户模型重新创建的模板) ).但它只会显示所有对象的表格.

如有必要,我可以提出请求数据.我可以向你保证我已经在模板上下文中看到了对象,实际上它必须是或者object.id不起作用. django-tables2的诀窍是什么?显然我已经做过一次了!

最佳答案
您可以覆盖视图的get_table_data方法,并返回要显示的对象列表.

在这种情况下,您需要一个只包含一个项目的列表,即DetailView中的对象.

def get_table_data(self):
    return [self.object]

相关文章

在这篇文章中,我们深入学习了XPath作为一种常见的网络爬虫技巧。XPath是一种用于定位和选择XML文档中特...
祝福大家龙年快乐!愿你们的生活像龙一样充满力量和勇气,愿你们在新的一年里,追逐梦想,勇往直前,不...
今天在爬虫实战中,除了正常爬取网页数据外,我们还添加了一个下载功能,主要任务是爬取小说并将其下载...
完美收官,本文是爬虫实战的最后一章了,所以尽管本文着重呈现爬虫实战,但其中有一大部分内容专注于数...
JSON是一种流行的数据传输格式,Python中有多种处理JSON的方式。官方的json库是最常用的,它提供了简单...
独立样本T检验适用于比较两组独立样本的均值差异,而配对T检验则适用于比较同一组样本在不同条件下的均...