Python 如何使用django-tables2在一个视图中显示多个表?

Python 如何使用django-tables2在一个视图中显示多个表?,python,view,multiple-tables,django-tables2,Python,View,Multiple Tables,Django Tables2,使用djt2 v0.15/dj1.6/pyth2.6.6 多个表的djt2文档示例视图文件: def people_listing(request) : config = RequestConfig(request) table1 = PeopleTable(Person.objects.all(), prefix="1-") table2 = PeopleTable(Person.objects.all(), prefix="2-") config.confi

使用djt2 v0.15/dj1.6/pyth2.6.6

多个表的djt2文档示例视图文件:

def people_listing(request) :

    config = RequestConfig(request)
    table1 = PeopleTable(Person.objects.all(), prefix="1-")
    table2 = PeopleTable(Person.objects.all(), prefix="2-")
    config.configure(table1)
    config.configure(table2)
    return render(request, "people_listing.html",
        {"table1": table1, "table2": table2})
首先,该示例对于引用的“table1”、“table2”参数似乎不正确。我的测试显示,至少在一个表中,引号中需要使用定义名“people_list”。此外,为什么会有人想显示相同的表两次?这是一个坏例子吗?以下是我尝试使用此结构的应用程序:

def AvLabVw(request):

    config = RequestConfig(request)
    cmutbl = CmuTable(CmuVersion.objects.all(), prefix="1-")
    simtbl = SimTable(Simulator.objects.all(), prefix="2-")
    config.configure(cmutbl)
    config.configure(simtbl)
    return render(request, "AvRelInfo.html", {"AvLabVw":cmutbl, "AvLabVw":simtbl})
url文件在AvLabVw上拾取,html模板使用render_table

{% render_table AvLabVw %}
这段代码只会显示一个表,以返回渲染行中的最后一个为准

在文档的其他地方,它说需要使用带有get_context_数据的SingleTableView,我还没有弄明白

我尝试过这种风格的实现,我认为它需要一个表对象和一个列表对象

views.py 从django_表2导入视图 从django_表2导入SingleTableView 从django_表2导入SingleTableMixin 从django.shortcuts导入渲染 从django_表2导入RequestConfig def SimVers_lst(请求): 返回呈现(请求'AvRelInfo.html',{'SimVers_lst':Simulator.objects.all()}) def AvLabVw(请求): config=RequestConfig(请求) simlst=SimVers_lst(Simulator.objects.all()) table=CmuTable(CmuVersion.objects.all(),prefix=“1-”) Stv=views.SingleTableView() multitbl=Stv.get_context_data() configure.configure(multitbl) 返回呈现(请求“AvRelInfo.html”,{“AvLabVw”:multitbl}) 在html模板中的
{%render_table AvLabVw%}
处使用通常的“全部捕获”进行BARF
“在/AvCtlapp/Expected table或queryset处出现ValueError,而不是'str'。”
... 找些垃圾。。。我想我可以试着看看它在一个壳里得到了什么,如果我能设置那个测试

谢谢你的帮助

PS:是否需要自定义呈现,这看起来如何?

您的第一个代码示例(从django-tables2文档复制而来)用于在一个页面中呈现两个表。这是一个不错的例子(我认为),因为它展示了如何使用不同前缀的相同查询集呈现来自相同表类的两个表

问题的最后一个代码示例是,关于使用SingleTableView,您弄错了。它的意思是在模板中呈现一个表,它基本上是一个基于类的视图。试着这样做:

class AvLabVw(SingleTableView):
    model = Simulator
    template_name = 'AvRelInfo.html'
    table_class = SimulatorTable
class AvLabVw(SingleTableView):
    model = Simulator
    template_name = 'AvRelInfo.html'
    table_class = SimulatorTable


def get_context_data(self, **kwargs):
    context = super(AvLabVw, self).get_context_data(**kwargs)
    context['table_cmu'] =  CmuTable(CmuVersion.objects.all(), prefix="1-")
    return context
模板如下所示:

{% load render_table from django_tables2 %}
{% render_table table %}
现在,如果要呈现多个表,请覆盖此视图中的
get\u context\u data()
方法,如下所示:

class AvLabVw(SingleTableView):
    model = Simulator
    template_name = 'AvRelInfo.html'
    table_class = SimulatorTable
class AvLabVw(SingleTableView):
    model = Simulator
    template_name = 'AvRelInfo.html'
    table_class = SimulatorTable


def get_context_data(self, **kwargs):
    context = super(AvLabVw, self).get_context_data(**kwargs)
    context['table_cmu'] =  CmuTable(CmuVersion.objects.all(), prefix="1-")
    return context
和模板类似:

{% load render_table from django_tables2 %}
{% render_table table %}
{% render_table table_cmu %}
和网址:

url(r'^something/$', AvLabVw.as_view(), name='avlabvw'),

感谢你的清理,serafeim,似乎无法获取语法…非常感谢ruddra的输入,我将对其进行分析。要知道这么多,就得查那个“超级”操作。因此,我猜您正在使用Python OO更改get_context_data方法。想知道这是否叫做“扩展”方法(与Java术语相比较)。AvLabVw是通用SingleTableVw类的OO子类?嗯,在django世界中,这种多表处理肯定是需要的。如果/当我开始操作时,我希望1页上有4个表。忽略我在文档多表示例中对上下文的批评,我可能已经能够使{“AvLabVw”:tablevals}工作,但我今天在Django模板语言中找到了上下文的定义:面向Python程序员的在线文档,并理解为什么您希望它们是相同的;-)好的,很乐意帮助:)顺便说一句,如果你接受这个答案,如果它对你有帮助的话,那就太好了。如果其他用户遇到类似的问题@JosephCamaioni,看到这个问题得到了回答,那就太好了。欢迎来到stackoverflow:)