如何使用Djangotables2在一个视图中显示多个表?

2024-10-01 11:32:58 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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”。另外,为什么有人要把同一张表显示两次呢?这是个坏例子吗?以下是我的应用程序尝试使用此结构:

^{pr2}$

url文件在AvLabVw上获取,html模板使用render_table。在

{% render_table AvLabVw %}

这段代码所发生的事情是只显示一个表,以返回呈现行上的最后一个为准。在

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

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

在视图.py在

from django_tables2 import views
from django_tables2 import SingleTableView
from django_tables2 import SingleTableMixin
from django.shortcuts import render
from django_tables2   import RequestConfig

def SimVers_lst(request):

     return render(request, 'AvRelInfo.html', {'SimVers_lst' : Simulator.objects.all()})

def AvLabVw(request):

    config = RequestConfig(request)
    simlst = SimVers_lst(Simulator.objects.all())
    table = CmuTable(CmuVersion.objects.all(), prefix="1-")
    Stv = views.SingleTableView()
    multitbl = Stv.get_context_data()
    config.configure(multitbl)
    return render(request, "AvRelInfo.html", { "AvLabVw" : multitbl })

在html模板中的{% render_table AvLabVw %}处使用通常的catch all "ValueError at /AvCtlapp/ Expected table or queryset, not 'str'." ... 拿些垃圾。。。我想我可以试试看,如果我能设置测试的话。。。在

谢谢你的帮助。。。在

PS:是否需要自定义渲染,该效果如何?在


Tags: djangofromimportconfigobjectsrequestdefhtml
1条回答
网友
1楼 · 发布于 2024-10-01 11:32:58

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

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

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

模板如下:

^{pr2}$

现在,如果要呈现多个表,请从此视图重写get_context_data()方法,如下所示:

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:

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

相关问题 更多 >