首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-tables2不排序

Django-tables2不排序
EN

Stack Overflow用户
提问于 2012-06-12 15:20:45
回答 3查看 3K关注 0票数 3

我使用django-tables2显示一个数据库表。看起来一切正常,但单击列标题不会按该列排序。标题是可点击的,但在它们的html中没有url文本,例如:

代码语言:javascript
复制
<div class="table-container">
<table class="paleblue"><thead><tr><th class="id orderable sortable"><a href="">ID</a>
</th><th class="orderable sortable system"><a href="">System</a></th> ...

我检查了django-tables2模板源,它说:

代码语言:javascript
复制
... <a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}"> ...

这是我不明白的。

我只能通过在view.py中设置order_by来进行排序:

代码语言:javascript
复制
class ResultsTable(tables.Table):
    class Meta:
        model = Performance
        attrs = {'class': 'paleblue'}
        order_by_field = True

def result(request, system):
    results = Performance.objects.filter(system__name=system)
    table = ResultsTable(results, order_by=('<any column name from Performance>',))
    RequestConfig(request).configure(table)
    return render_to_response('result.html', {'table': table})

但这显然只适用于一列,我想单击列来选择排序依据。

根据我在docs中的理解,按列排序应该“开箱即用”,这是正确的吗,还是我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-13 06:37:29

经过一夜的睡眠和对我的代码与django-tables2文档中的示例逐字比较之后,我找到了我自己问题的答案。

对于我使用的result函数:

代码语言:javascript
复制
return render_to_response('result.html', {'table': table})

如果我将其替换为:

代码语言:javascript
复制
return render(request, 'result.html', {'table': table})

排序的效果与预期一致。别问我为什么..。

票数 1
EN

Stack Overflow用户

发布于 2012-07-15 22:08:15

经历了同样的问题,只是我错过了

代码语言:javascript
复制
django.core.context_processors.request

从settings.py中的TEMPLATE_CONTEXT_PROCESSORS

票数 5
EN

Stack Overflow用户

发布于 2020-05-30 09:02:14

这个页面上的其他回复指向了正确的方向,但只是想包括在一个地方让它工作所需的一切。在视图中:

  1. 定义您的查询集而不排序
  2. 将查询集传递到表实例中
  3. Set表obj上的任何自定义设置,如default ordering
  4. Wrap it all in RequestConfig (基本排序不起作用!)
  5. 将完全配置的表传递到模板上下文

代码语言:javascript
复制
# views.py
from django_tables2 import RequestConfig
...
data = MyModel.objects.all()
my_table = MySummariesTable(data)
my_table.order_by = "-name"
RequestConfig(request).configure(my_table)
ctx = {"my_table": my_table}

return render(request, "path/mytemplate.html", ctx)

如果您的任何列需要按外键关系排序,请在表列定义中使用例如

代码语言:javascript
复制
col1 = tables.Column(verbose_name="Some Col", order_by="mycol.foobar.name")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10992090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档